我:cowboy
在Elixir中使用Erlang Web框架,我收到了一个错误:cowboy_http_req.reply
,这是我的代码:
mix.exs是:
defmodule Example.Mixfile do use Mix.Project def project do [ app: :example, version: "0.0.1", deps: deps ] end # Configuration for the OTP application def application do [ # you should start :inets and :crypto first, or it will not start cowboy applications: [:inets, :crypto], mod: {Example, []} ] end # Returns the list of dependencies in the format: # { :foobar, "0.1", git: "https://github.com/elixir-lang/foobar.git" } defp deps do [ { :cowboy, github: "extend/cowboy", tag: "0.9.0" }, # { :lager, github: "basho/lager" } ] end end
lib/example.ex是
defmodule示例使用Application.Behaviour
def start(_type, _args) do deps_started dispatch = :cowboy_router.compile([ {:_, [ {"/objects/[...]", Example.Object, []} ]} ]) :cowboy.start_http(:http, 100, [ip: {127,0,0,1}, port: 9080], [env: [dispatch: dispatch]]) ExampleSup.start_link end defp deps_started do deps = [:ranch, :cowlib, :cowboy] Enum.all? deps, &ensure_started/1 end defp ensure_started(app) do case :application.start(app) do :ok -> true {:error, {:already_started, _app}} -> true {:error, {:not_started, dep}} -> true = ensure_started(dep) ensure_started(app) error -> IO.puts "Couldn't start #{inspect app}: #{inspect error}" error end end end
我的lib/example/object.ex是:
defmodule Example.Object do @behaviour :cowboy_http_handler def init(_type, req, _opts) do {:ok, req, :undefine} end def handle(req, state) do {ok, req} = :cowboy_http_req.reply(200, [], "hello world", req) {:ok, req, state} end def terminate(_reason, _request, _state), do: :ok end
我用mix来管理reps,然后我启动牛仔服务器idx -S mix
,然后我发送一个http流使用curl:
curl -i http://127.0.0.1:9080/objects/index.html
和错误报告服务器出错:
=ERROR REPORT==== 28-Feb-2014::18:03:36 === Error in process <0.201.0> with exit value: {[{reason,undef},{mfa {'Elixir.Example.Object',handle,2}},{stacktrace,[{cowboy_http_req,reply,[200,[],<<11 bytes>>,{http_req,#Port<0.4438>,ranch_tcp,keepalive,<0.201.0>,<<3 bytes>>,'HTTP/1.1',{{127,0,0,1},58008},<<9 bytes>>,undefined,9080,<<14 bytes>>,[<<5 bytes>>],<<0 bytes>>,undefined,[],[{<<10 bytes>>,<<11 bytes>>},{<<4 bytes>>,<<14 bytes>>},{<<6 bytes>>,<<3 bytes>>}],[],undefined,[],waiting,undefined...
而curl客户端得到了500 Internal Server Error
.
有人可以帮我指出是什么问题吗?非常感谢.