現在AWSの無料枠内(EC2)でRailsアプリを2つ動かしています。
サンプルアプリを
(デプロイ編②)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで - Qiita
を参考にデプロイし、無料枠内でおさめるためEC2に自動起動・停止の設定をしてあります。
そしてEC2インスタンスを起動後に自動でRailsアプリが利用できるようにするために
EC2(AWS)で起動時にアプリを自動起動する - Qiita
を参考に設定してみましたがEC2インスタンスを再起動しても
Railsアプリが利用できませんでした。
もし解決法がわかる方がいらっしゃいましたらご教授いただきますようよろしくお願いいたします(m_ _m)
エラー内容
webブラウザで下記のメッセージが表示される
We're sorry, but something went wrong. If you are the application owner check the logs for more information.
期待する動作
EC2インスタンスを起動後に自動でRailsアプリがweb上で利用できるようにする
動作環境
AWS
- インスタンスタイプ: t2.micro
- EIP: 設定済
Rails
- 4.2.11.1
- Railsアプリケーションの場所: var/www/rails/
myapp
補足
EC2再起動後、インスタンスにログインし下記のコアmんどを実行するとRailsアプリは動作します
cd /var/www/rails/myapp; bundle exec unicorn_rails -c /var/www/rails/myapp/config/unicorn.conf.rb -D -E production;
試したこと(前提条件: terminalからEC2インスタンスにユーザーmyusername
で接続)
01-nginxを自動起動するように設定
bash
1[myusername@ip-xxx ~]$systemctl is-enabled nginx.service 2# enabled 3 4# 再起動後 5[myusername@ip-xxx ~]$ systemctl status nginx 6#● nginx.service - The nginx HTTP and reverse proxy server 7# Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) 8# Active: active (running) since 木 2019-10-10 07:23:08 UTC; 10min ago 9# Process: 3093 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) 10# Process: 3074 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) 11# Process: 3071 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) 12# Main PID: 3099 (nginx) 13# CGroup: /system.slice/nginx.service 14# ├─3099 nginx: master process /usr/sbin/nginx 15# └─3100 nginx: worker process
02-スクリプトファイル/home/username/start.sh
に実行したいコマンドを記述
bash
1# /home/myusername/start.sh 2cd /var/www/rails/myapp 3bundle exec rake assets:precompile RAILS_ENV=production 4bundle exec unicorn_rails -c /var/www/rails/myapp/config/unicorn.conf.rb -D -E production
- 自動起動スクリプトの作成
bash
1# /home/myusername/application-starter 2#!/bin/sh 3# chkconfig: 345 99 10 4# description: start shell 5case "$1" in 6 start) 7 su -l myusername -c "sh /home/myusername/start.sh" 8 ;; 9 stop) 10 echo "stop!" 11 ;; 12 *) break ;; 13esac
- ルートユーザーに切り替え、起動シェルの登録
bash
1[myusername@ip-xxx ~]$ sudo su - 2[root@ip-xxx ~]$ cd /etc/init.d/ 3[root@ip-xxx init.d]$ chmod +r application-starter 4[root@ip-xxx init.d]$ chkconfig --add application-starter 5[root@ip-xxx init.d]$ chkconfig application-starter on
追記(10/11)
- 自動起動スクリプトの作成を削除
- Unit定義ファイルを作成
sudo systemctl list-unit-files --type=service | grep start
を実行
しましたが、ステータス確認でstatusがfailed
の状態でうまくいきませんでした。
bash
1$ sudo systemctl status start-app 2# ● start-app.service - start-app daemon 3# Loaded: loaded (/etc/systemd/system/start-app.service; enabled; vendor preset: disabled) 4# Active: failed (Result: start-limit) since 金 2019-10-11 00:10:52 UTC; 14min ago 5# Main PID: 5821 (code=exited, status=127) 6# 7# ip-xxx.ap-northeast-1.compute.internal systemd[1]: start-app.service: main process exited, code=exited, status=127/n/a 8# ip-xxx.ap-northeast-1.compute.internal systemd[1]: Unit start-app.service entered failed state. 9# ip-xxx.ap-northeast-1.compute.internal systemd[1]: start-app.service failed. 10# ip-xxx.ap-northeast-1.compute.internal systemd[1]: start-app.service holdoff time over, scheduling restart. 11# ip-xxx.ap-northeast-1.compute.internal systemd[1]: start request repeated too quickly for start-app.service 12# ip-xxx.ap-northeast-1.compute.internal systemd[1]: Failed to start start daemon. 13# ip-xxx.ap-northeast-1.compute.internal systemd[1]: Unit start-app.service entered failed state. 14# ip-xxx.ap-northeast-1.compute.internal systemd[1]: start-app.service failed.
02-01. Unit定義ファイルを作成する
bash
1# etc/systemd/system/start-app.service 2[Unit] 3Description = start-app daemon 4 5[Service] 6ExecStart = /home/myusername/start.sh 7Restart = always 8Type = simple 9 10[Install] 11WantedBy = multi-user.target
02-02. UnitがServiceとして認識されたか確認する
bash
1$ sudo systemctl list-unit-files --type=service | grep start 2# plymouth-start.service disabled 3# start-app.service enabled
02-03. 自動起動の設定、起動
bash
1# 自動起動on 2$ sudo systemctl enable start-app 3# 起動 4$ sudo systemctl start start-app
追記3
ごにょごにょしてたらstatusに表示されるメッセージが変更されていたので追記します。
依然としてどの処理でエラーが発生しているのか、動作の妨げになっているのかわかりません(m_ _m)
参考: [CentOS7] systemdにサービスを登録して、サーバ起動時に自動でサービスを立ち上げる | RE:ENGINES
bash
1[Unit] 2Description = start-app daemon 3 4[Service] 5User = myusername 6 7# 環境変数パス 8EnvironmentFile=/etc/systemd/env 9 10 11ExecStart = /home/myusername/start.sh 12Restart = always 13Type = simple 14 15[Install] 16WantedBy = multi-user.target
bash
1# /etc/systemd/env 2PATH=/home/myusername/.rbenv/shims:/home/myusername/.rbenv/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/myusername/.local/bin:/home/myusername/bin
追記、修正後の結果
bash
1[myusername@ip-10-0-1-127 ~]$ sudo systemctl status start-app.service 2# ● start-app.service - start-app daemon 3# Loaded: loaded (/etc/systemd/system/start-app.service; enabled; vendor preset: disabled) 4# Active: active (running) since 金 2019-10-11 07:01:56 UTC; 4s ago 5# Main PID: 3842 (start.sh) 6# CGroup: /system.slice/start-app.service 7# ├─3842 /bin/sh /home/myusername/start.sh 8# └─3843 /var/www/rails/myapp/vendor/bundle/ruby/2.4.0/bin/rake assets:precompile RAILS_ENV=production 9# 10# 10月 11 07:01:56 ip-10-0-1-127.ap-northeast-1.compute.internal systemd[1]: start-app.service holdoff time over, scheduling restart. 11# 10月 11 07:01:56 ip-10-0-1-127.ap-northeast-1.compute.internal systemd[1]: Started start-app daemon. 12# 10月 11 07:01:56 ip-10-0-1-127.ap-northeast-1.compute.internal systemd[1]: Starting start-app daemon...
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/11 00:37
2019/10/11 02:21
2019/10/11 05:55
2019/10/11 06:04
2019/10/11 06:12
2019/10/11 07:47
2019/10/13 15:41
2019/10/14 00:56
2019/10/14 01:35
2019/10/15 08:16