We’re sorry, but something went wrong. のエラー

AWSを使ってRailsアプリケーションをデプロイします。 初心者なので以下の内容は間違いがある可能性もあります。ご了承ください。

エラー内容

unicornを起動すると
画面に「We’re sorry, but something went wrong.」と表示されて画面が表示できない。

Image from Gyazo

結論

マイグレーションのエラー。 クラス名の違う、内容の全く同じマイグレーションファイルが作成されており、マイグレートが正しくできていなかったため起こったエラー。

※以下二つのマイグレーションファイルは内容が一緒

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 masterunicorn_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]を使用する。

参考 # 【kill】Linuxでプロセスを終了させるコマンド

6.unicornを起動させる

$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

7.サーバーに接続

ex) http://XX.XXX.X.XXX:3000/ 無事つながりました!