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

7stud 7stud@REDACTED
Mon Jun 26 04:06:27 CEST 2017


> Now it is broken because of the other issue I mentioned, the copy of
> cowboy it is fetching is from github master and the API changed since
> the code was written.

> You'll either need to update the project's code or find what cowboy
> version it worked with and update the dependencies to use that version.

I can't figure out how to specify an earlier version of cowboy:

rebar.config:
========
{deps, [
  {cowboy, "1.0.*", {git, "https://github.com/ninenines/cowboy/tree", "1.0.x"}}
]}.
========

original rebar.config:
=========
{deps, [
  {cowboy, ".*", {git, "git://github.com/extend/cowboy.git", "master"}}
]}.
========


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

Right, it fixed your original issue, which was ssl not being started.

Now it is broken because of the other issue I mentioned, the copy of
cowboy it is fetching is from github master and the API changed since
the code was written.

You'll either need to update the project's code or find what cowboy
version it worked with and update the dependencies to use that version.

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

On Sun, Jun 25, 2017, at 05:33 PM, 7stud wrote:
> > 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
_______________________________________________
erlang-questions mailing list
erlang-questions@REDACTED
http://erlang.org/mailman/listinfo/erlang-questions





More information about the erlang-questions mailing list