1

推奨されるビルドパックを使用して、Heroku で Webmachine アプリをセットアップしようとしています。私のプロフィールは

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

残念ながら、これはdynoを正しく開始せず、失敗します

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のデーモンとしてノードを起動する方法はありますか?

startの代わりに使用しようとしたことに注意consoleしてくださいが、成功しませんでした。

4

1 に答える 1

1

そのため、試行錯誤を繰り返した結果、何が問題なのかを突き止めました。Heroku はインタラクティブ シェルが存在することを好まないため、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構成ファイルを使用して、アプリケーションを起動します。ここで重要だったのは、-noshellheroku が期待どおりにプロセスを実行できるようにするオプションをコマンドに含めることです。

于 2015-12-09T15:16:15.793 に答える