AWS+RDSでRailsアプリを公開するにあたってつまづいたエラー3つ

こんにちは!

今月から新メンバーが加わり後ろの席ではRuby相手に奮闘している後輩君の姿が。。。嗚呼、懐かしい。
今となっては粋ってる私ですが当初使えたのはエクセル関数くらいで、forなんて・・・です。
当社ではこんな私のような未経験の社員に対してステップアップ式のオリジナルな課題を用意しています。
もちろん課題をこなすことは大切ですがもっと大切なのは課題をこなす過程において
調べるくせをつける、自分で進めるくせをつけるということです(と言われていたような気もします)。
これは今後の業務にも通じるかと思います。
そんなペーペーな私も3ヶ月目にはRuby on RailsでWebサイトをローカルで動かせるまでになりました。
せっかくなので今後の当社に興味を持っていただけるきっかけになればと思い、この度AWS(EC2+RDS)で公開しました。
概要はインスタもどきを作ってみました。
gotostagram
↑AWS無料枠を使っているため約1年間の限定公開です。

AWSでのデプロイは基本的には下記の参考文献でできるのですが、私の環境ではエラー続出でした。

参考文献

世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで

今回は特につまづいたエラー3つについて対応した点を書いていきます。

つまづいたエラー

1.EC2にSSH拒否された
2.nginxでBad Gateway 502
3.mysqlにinsertできない

1.EC2にSSH拒否された

EC2へはteratermを使ってsshしています。ブラウザからのコンソール画面でもできるようですが
クロム未対応のため断念しました。
実は当該アプリは初夏に一度公開していたのですが、いつの間にかAWSにsshできなくなっていました…。

意外とよくあることらしいです。
ログを見ましたが、原因は特定できず。
こういう場合はインスタンスを作り直したほうが良いです。

古いインスタンスの停止と新しいインスタンスの作成

私もそうなのですが無料枠を使っている人は複数インスタンスを同時に稼働させると規定時間を超える可能性が高くなり
結果として請求が発生します。これを防止するために、まず最初に壊れた方(Gotostagram)を停止し、
同じ設定で新しいインスタンスを作ります(gotostagram)。
【インスタンスの停止】
インスタンスの停止は、アクション > インスタンス > 停止 でできます。

ボリュームのデタッチ

停止したら次に古い方のインスタンスからボリュームを解除します。ボリュームは簡単に言うと記憶領域です。EC2も記憶領域があるのですが停止すると初期化するのでそのためにボリュームに紐づけて情報を残します。
停止させたインスタンスは使わないので念の為としてボリュームをデタッチします。
【ボリュームのデタッチ】
ボリュームのデタッチは、左メニューからボリュームをクリック > アクション > ボリュームのデタッチ でできます。

停止したボリュームのステータスがavailableになっていれば大丈夫です。
【ボリュームの作成】
ボリュームはデタッチしたボリュームと同じパラメータにして作成します。
作成したら、アクション > ボリュームのアタッチ
でインスタンスと紐づけます。このときインスタンスは作成したインスタンスを選択肢、デバイスは”/dev/xvda”を入力します。

nginxでBad Gateway 502

Railsアプリ側でもエラー対処していましたがそれは余力があれば書くとして、
いざデプロイしたところ上記のようなエラーがブラウザで出ました。
原因としては/etc/nginx/nginx.confのuser名をAWSのユーザー名にしていなかったからです。
ここは見逃しやすいので気をつける必要があります。

変更したら

でnginxを再起動します(念の為unicornを先に止めておくといいかもです)

3.mysqlにinsertできない

当該アプリをローカルで動かしたときには予め入れておいたmysqlでの操作で問題なく使えていました。
ところがRDSでのmysqlではいざ画像を投稿しようとするとinsertに関するエラーが表示されました。
原因はRDSで作ったインスタンスのデフォルト設定。どうやら文字コードがuft-8ではなく、latin1になっており
つまづいたようです。
テーブル一つ一つ触るのは面倒くさいのでconfigを触りましょう。
my.cnf内のcharacter-set-serverをutf8にします。

ちなみにRDSのmysqlには以下のコマンドで入ります。

/etc/my.cnf

まだデータは登録していないので、一度、データベースを削除してから作成し、マイグレーションします。

もう一度ターミナルからmysqlに入り、

で確認します。

全テーブルのCollationがuft8となっているので変更されました。

無事データを登録できます。

この記事を書いた人

アバター

グローディア 株式会社

グローディア株式会社アカウントです。