先日、gollum を systemd から実行することを試みました。
gollum をつかってみたい
今回は rails を systemd から実行してみます。
目次
動作環境
- CentOS7.7 (VirtualBox で用意)
- Rails 5.2.4.2
アプリケーションと nginx の設定はrails と nginx を unix ドメインソケットで連携させるを参照。
サービス設定
/etc/systemd/system/rails.service
を以下のように作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Unit] Description=RailsApp After=network.target
[Service] Type=simple Environment="PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin" WorkingDirectory=/root/testapp ExecStart=/root/.rbenv/versions/2.4.9/bin/bundle exec /root/testapp/bin/rails s Restart=always
[Install] WantedBy=default.target
|
設定についていくつか解説します。
Environment
Environment="PATH=/root/.rbenv/shims:/root/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
を設定します。
rbenv を使っていることもあり、rbenv のパスを環境変数としても持っている必要がありました。
env
コマンドを実行し、表示されたPATH=~~~~
の部分を貼り付けています。
環境変数を渡すには、Environment
とEnvironmentFile
を使えますが、今回は、PATH
だけなのでEnvironment
を採用しました。
ほかにも渡すものが増えれば、Environment
を複数書くことはできますがEnvironmentFile
を採用すべきなのでしょう。
WorkingDirectory
WorkingDirectory=/root/testapp
を設定しています。
今回の Rails アプリケーションは/root/testapp
に展開されています。
ですので、WorkingDirectory
を/root/testapp
に設定しました。
ExecStart
ExecStart=/root/.rbenv/versions/2.4.9/bin/bundle exec /root/testapp/bin/rails s
を設定しています。
環境数とWorkingDirectory
を/root/testapp
に設定しましたが、bundle exec rails s
と記述することはできませんでした。
bundle
とrails
は、絶対パスで設定する必要がありました。
Restart
Restart=always
を設定しています。
立ち上げたサービスを正規の手段で(systemd stop ~~
)停止されない限り常に再起動させます。
確認
systemctl start rails
で起動します。
ステータスを確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ● rails.service - RailsApp Loaded: loaded (/etc/systemd/system/rails.service; disabled; vendor preset: disabled) Active: active (running) since 水 2020-04-29 18:58:54 JST; 2min 52s ago Main PID: 6451 (bundle) CGroup: /system.slice/rails.service mq6451 puma 4.3.3 (unix:///root/testapp/tmp/sockets/puma.sock) [testapp]
4月 29 18:58:56 localhost.localdomain bundle[6451]: (0.2ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mo...47483 4月 29 18:58:56 localhost.localdomain bundle[6451]: ? vender/bundle/ruby/2.4.0/gems/activerecord-5.2.4.2/lib/active_record…r.rb:98 4月 29 18:58:56 localhost.localdomain bundle[6451]: (0.2ms) SELECT `schema_migrations`.`version` FROM `schema_migrations...` ASC 4月 29 18:58:56 localhost.localdomain bundle[6451]: ? vender/bundle/ruby/2.4.0/gems/activerecord-5.2.4.2/lib/active_record…r.rb:98 4月 29 18:58:56 localhost.localdomain bundle[6451]: Processing by ToolsController 4月 29 18:58:56 localhost.localdomain bundle[6451]: Rendering tools/index.html.erb within layouts/application 4月 29 18:58:56 localhost.localdomain bundle[6451]: Tool Load (0.6ms) SELECT `tools`.* FROM `tools` 4月 29 18:58:56 localhost.localdomain bundle[6451]: ? app/views/tools/index.html.erb:14 4月 29 18:58:56 localhost.localdomain bundle[6451]: Rendered tools/index.html.erb within layouts/application (8.7ms) 4月 29 18:58:57 localhost.localdomain bundle[6451]: Completed 200 OK in 241ms (Views: 229.0ms | ActiveRecord: 2.2ms) Hint: Some lines were ellipsized, use -l to show in full.
|
どうやら起動できていそうです。
今度は、自動再起動を確認します。
1 2 3 4 5 6 7 8 9 10 11 12
| ps aux|grep testapp >root 6451 0.3 0.3 883964 103632 ? Ssl 18:58 0:01 puma 4.3.3 (unix:///root/testapp/tmp/sockets/puma.sock) [testapp] >root 6512 0.0 0.0 112728 968 pts/2 R+ 19:04 0:00 grep --color=auto testapp
kill 6451
ps aux|grep testapp >root 6513 44.0 0.1 877372 61824 ? Ssl 19:04 0:00 puma 4.3.3 (unix:///root/testapp/tmp/sockets/puma.sock) [testapp] >root 6534 0.0 0.0 112728 968 pts/2 R+ 19:04 0:00 grep --color=auto testapp
|
kill 前後で、プロセスの番号が変わっています。
プロセスが再起動できています。
今回は、systemd で rails を起動し、サービスの自動再起動を設定しました。
こちらの設定を見つけるまで、はまって 3-4 時間ぐらいかけてしまったので、もっと速度を上げたいところです。
ではでは。