[erlang-questions] Programming Erlang: Chap 18, Websockets

7stud 7stud@REDACTED
Mon Jun 26 03:08:48 CEST 2017


Here's the source code that the new error:

     {undef,[{cowboy,start_http, 

points to:

web_server_start(Port, Dispatcher) ->
    E0 = #env{dispatch=Dispatcher},
    Dispatch = cowboy_router:compile([{'_',[{'_', ?MODULE, E0}]}]),  
    %% server is the name of this module
    NumberOfAcceptors = 100,
    Status = 
	cowboy:start_http(ezwebframe,
			  NumberOfAcceptors,
			  [{port, Port}],
			  [{env, [{dispatch, Dispatch}]}]),

...
...

-----Original Message-----
From: "7stud" [7stud@REDACTED]
Date: 06/25/2017 08:33 PM
To: erlang-questions@REDACTED
Subject: Re: [erlang-questions] Programming Erlang: Chap 18, Websockets

> So the quick fix is to add `application:start(asn1),
application:start(public_key), application:start(ssl),` before the start
of ranch. Or just `application:ensure_all_started(ranch)`.<

I tried some combination of those already, but maybe not that exact combination.  Here is what I get when I try 

     application:ensure_all_started(ranch)


Source code:
----------
start_link(Dispatch, Port) ->
    io:format("Starting:~p~n",[file:get_cwd()]),
    ok = application:start(crypto),
    %%ok = application:start(ranch),  % Line #22
    application:ensure_all_started(ranch),
    ok = application:start(cowlib), 
    ok = application:start(cowboy),
    ok = web_server_start(Port, Dispatch).
----------

Output:
==========
../ezwebframe-master$ gmake
...
...
Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

a simple_demo of websockets....
Load the page http://localhost:1456/ in your browser
Starting:{ok,"/Users/7stud/erlang_programs/ezwebframe/ezwebframe-master/demos"}
Eshell V8.2  (abort with ^G)
1> {"init terminating in do_boot",{undef,[{cowboy,start_http,[ezwebframe,100,[{port,1456}],[{env,[{dispatch,[{'_',[],[{'_',[],ezwebframe,{env,#Fun<ezwebframe_demos.0.106014447>}}]}]}]}]],[]},{ezwebframe,web_server_start,2,[{file,"src/ezwebframe.erl"},{line,37}]},{ezwebframe,start_link,2,[{file,"src/ezwebframe.erl"},{line,29}]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
init terminating in do_boot ()

Crash dump is being written to: erl_crash.dump...done
make[1]: *** [all] Error 1
gmake: *** [Makefile:4: all] Error 2
=============


-----Original Message-----
From: "Tristan Sloughter" [t@REDACTED]
Date: 06/25/2017 05:14 PM
To: erlang-questions@REDACTED
Subject: Re: [erlang-questions] Programming Erlang: Chap 18, Websockets

The main issue here looks to be that the dep is tied to the master
branch of a git repo. So the dependency is defined as one that will
continually change over time.

The version of ranch used when the code was written probably didn't list
`ssl` as a dependency, now that it does `application:start(ranch)` will
fail. So the quick fix is to add `application:start(asn1),
application:start(public_key), application:start(ssl),` before the start
of ranch. Or just `application:ensure_all_started(ranch)`.

Moral of the story: lock your dependencies (even better if on a package
and not just a git reference) and use a release or
`application:ensure_all_started` for running a project :)

-- 
  Tristan Sloughter
  "I am not a crackpot" - Abe Simpson
  t@REDACTED

On Sun, Jun 25, 2017, at 02:00 PM, Joe Armstrong wrote:
> Unfortunately cowboy (which I used) and the websockets standard have
> changed since I wrote the book. I also used make and not rebar.
> 
> You've now run into what is one of the biggest problems in the
> computer world - code that used to work no longer works despite the
> fact the code itself has not been changed.
> 
> One way around this is to use zero dependencies - in fact several
> programs I wrote 30 years ago in Erlang still work fine with no
> changes because there are no external dependencies. (as an aside: this
> is why I like code with zero external dependencies - it takes a lot
> longer to write - but you don't have to support it into the future
> when they things you depend upon change in a manner that is
> incompatible manner)
> 
> In this example the underlying websockets protocol changed -
> websockets its is a crazy mess - websockets should have provided raw
> socket transport instead they chose to scramble the data in a weird
> manner to avoid problems with badly written proxies.
> 
> The idea of "write once run anywhere" is a great goal - but we can't
> even do this - "write once run forever with no changes to your code"
> would be even better and things like NixOS are a step in the right
> direction.
> 
> Welcome to the world of broken software.
> 
> In my opinion this (making sure software evolution does not break
> existing functioning software)  is one of the biggest remaining
> software problems - my guess is that this problem is getting worse
> (due to the explosion in the numbers of programming languages,
> libraries and frameworks and build systems) and will be even worse in
> the IoT world.
> 
> Lots for you guys to work on :-)
> 
> Cheers
> 
> /Joe
> 
> 
> On Sun, Jun 25, 2017 at 10:02 PM, 7stud <7stud@REDACTED> wrote:
> > I'm having trouble running the demos for the ezwebframe.  I installed the old rebar (v. rebar3), but I'm getting the error:
> >
> >     {badmatch,{error,{not_started,ssl}}
> >
> > I'm on Mac OSX 10.10.5.  Here is my output:
> >
> > ===========
> > ../ezwebframe-master$ gmake
> > ...
> > ....
> > Erlang/OTP 19 [erts-8.2] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
> >
> > a simple_demo of websockets....
> > Load the page http://localhost:1456/ in your browser
> > Starting:{ok,"/Users/7stud/erlang_programs/ezwebframe/ezwebframe-master/demos"}
> > Eshell V8.2  (abort with ^G)
> > 1> {"init terminating in do_boot",{{badmatch,{error,{not_started,ssl}}},[{ezwebframe,start_link,2,[{file,"src/ezwebframe.erl"},{line,22}]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
> > init terminating in do_boot ()
> >
> > Crash dump is being written to: erl_crash.dump...done
> > make[1]: *** [all] Error 1
> > gmake: *** [Makefile:4: all] Error 2
> > ===========
> >
> > Thanks for any help is solving this problem!
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
_______________________________________________
erlang-questions mailing list
erlang-questions@REDACTED
http://erlang.org/mailman/listinfo/erlang-questions


_______________________________________________
erlang-questions mailing list
erlang-questions@REDACTED
http://erlang.org/mailman/listinfo/erlang-questions





More information about the erlang-questions mailing list