1

我一直在尝试使用推荐的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>

有没有办法启动节点,也许作为测功机上的守护进程?

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

4

1 回答 1

1

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

我已将我的 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

哪个启动应用程序app_name,使用版本的sys.config配置文件。这里至关重要的是,-noshell在命令中有选项,它允许 heroku 按照他们的期望运行进程。

于 2015-12-09T15:16:15.793 回答