web-dev-qa-db-ja.com

systemdを再起動する方法Rails Pumaを使用したアプリ

私は今一週間これに苦労していて、本当に答えを見つけることができないようです。 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サービスでこのコマンドを複製するにはどうすればよいですか?

12
WagnerMatosUK

フォアマン を調べましたか? Foremanを使用すると、複数のプロセスがある場合にアプリケーションを簡単に開始および停止できます。ちなみに、アプリケーションを(再)開始および停止するためのsystemdまたはupstartスクリプトを生成できる export 関数も提供します。

すでにcapistranoを使用しているので、 capistrano-foreman を使用して、これらすべてをcapistranoとうまく統合できます。

これらのリソースでいくつかの用途が見つかることを願っています

3
Erik Deijl

最後に、問題は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
23
WagnerMatosUK