私は今一週間これに苦労していて、本当に答えを見つけることができないようです。 RailsアプリをCapistranoでデプロイしました。サーバーとしてPumaを使用しています。
デプロイすると、すべて問題なく動作します。問題は、Pumaを再起動時やクラッシュ時に起動させることです。
デプロイメントのセットアップを取得するために、これを使用しました チュートリアル 。私もRVMを使用しています。私が得ると思われる問題は、Pumaを起動するサービスを取得することです。これが私が使用したものです(サービスファイル):
_[Unit]
Description=Puma HTTP Server
After=network.target
[Service]
Type=simple
#User=my-user
WorkingDirectory=/home/my-user/apps/MyApp/current
ExecStart=/home/my-user/apps/MyApp/current/sbin/puma -C /home/my-user/apps/MyApp/shared/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target
_
それはうまくいきません。私は問題がRubyすべてのユーザーにインストールされていないことだと思い始めていたので、すべてのユーザーにRVMをインストールしましたが、それでも同じ問題が発生します。サーバーにはrootとmy-userしかありません。
Capistranoのデプロイ方法を見ると、実行されるコマンドはcd /home/my-user/apps/MyApp/current && ( RACK_ENV=production /home/my-user/.rvm/bin/rvm default do bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb --daemon )
です。前述のコマンドを使用すると、Systmdからパラメーターの欠落について不平を言うエラーが表示されます。そこで、それを使用してスクリプトを作成し、このスクリプトを呼び出してアプリを起動するサービスファイルを取得しました。
それもうまくいきません。サーバー上のどこからでもスクリプトを呼び出すと、スクリプトがアプリを起動するため、Systemdの構成に問題がありますが、何が問題なのか理解できず、デバッグ方法がわかりません。システムのWebサイトでデバッグページを見ましたが、役に立ちませんでした。 _systemctl status puma.service
_を実行すると、サービスが失敗した状態にあることがわかりますが、その方法や理由はわかりません。
また、注目に値するのは、Appフォルダーから_bundle exec puma -C /home/my-user/apps/MyApp/shared/puma.rb
_を実行すると、正常に機能するので、Systemdサービスでこのコマンドを複製するにはどうすればよいですか?
フォアマン を調べましたか? Foremanを使用すると、複数のプロセスがある場合にアプリケーションを簡単に開始および停止できます。ちなみに、アプリケーションを(再)開始および停止するためのsystemd
またはupstart
スクリプトを生成できる export 関数も提供します。
すでにcapistranoを使用しているので、 capistrano-foreman を使用して、これらすべてをcapistranoとうまく統合できます。
これらのリソースでいくつかの用途が見つかることを願っています
最後に、問題は2つありました。1)rvmがすべてのユーザーに適切にインストールされなかったため、デプロイヤーユーザーがRuby/bundle/etcを使用できず、次にスクリプトも間違っていました。以下の参考のために、私のために働いた改訂されたスクリプトがあります:
[Unit]
Description=Puma HTTP Server
After=network.target
[Service]
Type=simple
User=deployer
WorkingDirectory=/var/www/apps/MRCbe/current
ExecStart=/bin/bash -lc 'bundle exec puma -C /var/www/apps/MRCbe/shared/puma.rb'
Restart=always
[Install]
WantedBy=multi-user.target