We’re sorry, but something went wrong. のエラー
AWSを使ってRailsアプリケーションをデプロイします。 初心者なので以下の内容は間違いがある可能性もあります。ご了承ください。
エラー内容
unicornを起動すると
画面に「We’re sorry, but something went wrong.」と表示されて画面が表示できない。
結論
マイグレーションのエラー。 クラス名の違う、内容の全く同じマイグレーションファイルが作成されており、マイグレートが正しくできていなかったため起こったエラー。
※以下二つのマイグレーションファイルは内容が一緒
DeviseCreateUsers
class DeviseCreateUsers < ActiveRecord::Migration[5.0] def change create_table :users do |t| ## Database authenticatable t.string :name, null: false, unique: true, index: true t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" # 以下略
Add devise to users
class AddDeviseToUsers < ActiveRecord::Migration[5.0] def change create_table :users do |t| ## Database authenticatable t.string :name, null: false, unique: true, index: true t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" # 以下略
同じ内容のマイグレーションファイルが生成された理由は不明ですが、恐らく無駄に$rails db:create RAILS_ENV=production
,$rails db:migrate RAILS_ENV=production
を実行したため??
解決方法
1.ロールバックをする
ターミナル
$ rails db:rollback STEP=○
を実行。
参考(Qiita記事) 【Rails】$rails db:rollbackしたい時の間違えない手順)
○の部分は戻る個数を指定。 個数は、現在地を含めるそうなので2なら3つのファイルまで戻ります。
↓こんな感じでdropされたりetc
== 20191024111513 CreateMessages: reverting =================================== -- drop_table(:messages) -> 0.0240s == 2019XXXXXXXXXX CreateMessages: reverted (0.0277s) ========================== == 2019XXXXXXXXXX CreateGroupUsers: reverting ================================= -- drop_table(:group_users) -> 0.0061s == 2019XXXXXXXXXX CreateGroupUsers: reverted (0.0063s) ======================== == 2019XXXXXXXXXX CreateGroups: reverting ===================================== -- drop_table(:groups) -> 0.0034s == 2019XXXXXXXXXX CreateGroups: reverted (0.0035s) ============================ == 2019XXXXXXXXXX AddDeviseToUsers: reverting ================================= -- remove_index(:users, {:column=>:reset_password_token}) -> 0.0134s -- remove_index(:users, {:column=>:email}) -> 0.0069s -- drop_table(:users) -> 0.0030s == 20191022120451 AddDeviseToUsers: reverted (0.0236s) ========================
2.念の為、rails db:migrate:status
でマイグレーションの状況を確認する
rails db:migrate:status database: sample_development Status Migration ID Migration Name -------------------------------------------------- up 2019XXXXXXXXXX Devise create users down 2019XXXXXXXXXX Add devise to users down 2019XXXXXXXXXX Create groups down 2019XXXXXXXXXX Create group users down 2019XXXXXXXXXX Create messages
upが実行済みで、downが未実行のものです。downにしたい目的のファイルはAdd devise to users
のものなのでそこまで戻しました。
2.重複しているファイルを削除する
内容が重複しているファイルを削除します。
今回ならAdd devise to users
となっている方のファイルです。
3.コミットのちプルを実行
今回は本番環境でのエラーなのでコミット→プルまでします。
git hub desktopでコミット、プッシュのち、 EC2サーバー上で以下を実行。
git pull origin master
4.データベースの作成&マイグレーションを行う
$ rails db:create RAILS_ENV=production $ rails db:migrate RAILS_ENV=production
5.unicornのプロセスを停止
unicornを再起動させたいため一度プロセスを停止します。
pxコマンドでプロセスID(PID)を確認する。
ターミナル(EC2サーバ)
[ec2-user@ip-XXX-XX-XX-XXX <リポジトリ名>]$ ps aux | grep unicorn ec2-user 12345 0.4 18.1 588472 182840 ? Sl 01:55 0:02 unicorn_rails master -c config/unicorn.rb -E production -D ec2-user 12343 0.0 17.3 589088 175164 ? Sl 01:55 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D ec2-user 12342 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep --color=auto unicorn
unicorn_rails master
のプロセスIDを入力しkillする
$ kill 12345
プロセスを確認
unicorn_rails master
とunicorn_rails worke
がなくなっていることを確認。
[ec2-user@ip-XXX-XX-XX-XXX <リポジトリ名>]$ ps aux | grep unicorn ec2-user 12342 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep --color=auto unicorn
※強制終了したい場合は$ kill -9 [プロセスID]
を使用する。
6.unicornを起動させる
$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
7.サーバーに接続
ex) http://XX.XXX.X.XXX:3000/ 無事つながりました!