Erlang/Webmachine 无法在 heroku 上启动

Erlang/Webmachine doesn't start on heroku

我一直在尝试使用推荐的 buildpack 在 Heroku 上设置 Webmachine 应用程序。我的个人资料是

# Procfile
web: sh ./rel/app_name/bin/app_name console

不幸的是,这不能正确启动测功机,它失败了

2015-12-08T16:34:55.349362+00:00 heroku[web.1]: Starting process with command `sh ./rel/app_name/bin/app_name console`
2015-12-08T16:34:57.387620+00:00 app[web.1]: Exec: /app/rel/app_name/erts-7.0/bin/erlexec  -boot /app/rel/app_name/releases/1/app_name -mode embedded -config /app/rel/app_name/releases/1/sys.config -args_file /app/rel/app_name/releases/1/vm.args -- console
2015-12-08T16:34:57.387630+00:00 app[web.1]: Root: /app/rel/app_name
2015-12-08T16:35:05.396922+00:00 app[web.1]: 16:35:05.396 [info] Application app_name started on node 'app_name@127.0.0.1'
2015-12-08T16:35:05.388846+00:00 app[web.1]: 16:35:05.387 [info] Application lager started on node 'app_name@127.0.0.1'
2015-12-08T16:35:05.399281+00:00 app[web.1]: Eshell V7.0  (abort with ^G)
2015-12-08T16:35:05.399283+00:00 app[web.1]: (app_name@127.0.0.1)1> *** Terminating erlang ('app_name@127.0.0.1')
2015-12-08T16:35:06.448742+00:00 heroku[web.1]: Process exited with status 0
2015-12-08T16:35:06.441993+00:00 heroku[web.1]: State changed from starting to crashed

但是当我通过 heroku toolbelt 运行 相同的命令时,它会从控制台启动。

$ heroku run "./rel/app_name/bin/app_name console"
Running ./rel/app_name/bin/app_name console on tp-api... up, run.4201
Exec: /app/rel/app_name/erts-7.0/bin/erlexec  -boot /app/rel/app_name/releases/1/app_name -mode embedded -config /app/rel/app_name/releases/1/sys.config -args_file /app/rel/app_name/releases/1/vm.args -- console
Root: /app/rel/app_name
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

16:38:43.194 [info] Application lager started on node 'app_name@127.0.0.1'
16:38:43.196 [info] Application app_name started on node 'app_name@127.0.0.1'
Eshell V7.0  (abort with ^G)
(app_name@127.0.0.1)1>

有没有办法启动节点,也许作为 dyno(s) 上的守护进程?

注意 我尝试使用 start 而不是 console,但没有取得任何成功。

经过多次修改、反复试验,找出问题所在。 Heroku 不喜欢交互式 shell 在那里 - 因此通过 console 启动 Erlang 应用程序时崩溃失败。

我已将 Procfile 调整为以下内容:

# Procfile
web: erl -pa $PWD/ebin $PWD/deps/*/ebin -noshell -boot start_sasl -s reloader -s app_name -config ./rel/app_name/releases/1/sys

使用版本的 sys.config 配置文件启动应用程序 app_name。这里的关键是在命令中使用 -noshell 选项,这允许 heroku 运行 按照他们的预期进行处理。