Topics

トピックスお知らせやちょっと役に立つ読みものなど

Loading...
開発ブログ

2021.01.10

最終更新:2026.02.23

Windows環境からAWS EC2にRails6 + PostgreSQLのWEBアプリをデプロイする際ハマったことまとめ

こんにちは、エンジニアのみなせしゅんです。

先日、AWS EC2に現在開発中のRailsアプリをデプロイする機会があったので、Qiitaのこちらのシリーズ記事を参考にさせていただきながら作業を進めていました。

(デプロイ編①)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで

その際、自身のローカル環境が上記の記事で想定されている環境と異なるOS(Windows)だったこともあってか、だいぶ色々な箇所でハマり完了まで2日かかったので、自分への備忘録も兼ねてハマったポイントを淡々とまとめてみます。

※自動デプロイ(Capistrano)は使用しない想定です。

pemを使用したEC2インスタンスへのログイン

第1ハードル、EC2へのログインです。

ネットで検索すると、「Windows環境ではPuTTYやTeraTerm等のSSHクライアントを使用しないとEC2にはログインできない」という記事が出てきます。

しかし、2018年の春のWindows 10アップデートでSSHを使える仕組み(OpenSSH)が標準で組み込まれたそうで、PuTTYやTeraTermを使わずともPowerShellやコマンドプロンプトから以下のコマンドで普通にログインができました。

//ssh -i インスタンス作成時に作成したpem ec2-user@インスタンスのパブリックIP
ssh -i sample_app.pem ec2-user@12.345.678.901

これに関してはハマったポイントではないですが、有益な情報のはずなのでメモ。

 

ちなみにSSHキーペアの作成もPowerShellやコマンドプロンプトからいけました。

ssh-keygen

 

.ssh/configファイルを使用したEC2インスタンスへのログイン

sshコマンドを使ってログインする際、毎回ipとかユーザー名とかを指定しないといけないのはめんどくさかったので、configファイルを用いて簡単にログインできるようにしようとしました。

参考:~/.ssh/config による快適 SSH 環境 - Qiita

configファイルはこんな感じのやつです↓

Host host_sample
  Hostname 接続先のIPアドレス
  Port 22
  User examplename
  IdentityFile ~/.ssh/example_key_rsa (秘密鍵の設定)

 

ですが、任意のディレクトリ内に".ssh"というディレクトリを作って、上記のconfigファイルをそこに配置し以下のようなコマンドを打っても、"Could not resolve hostname" と言われてしまい上手くログインできません。

cd xxx/.ssh
ssh host_sample

 

何でだろう~~configファイルの書き方が違うのかな~~などと色々調べた結果、どうやらconfigファイルはホームディレクトリ配下の".ssh"ディレクトリに配置すべきと決まっているようだ、というところまで辿り着きました。

参考:Windows10のOpenSSHでconfig使ってSSH接続

windowsでいうホームディレクトリはここだそうです。(初めて知った)

C:\Users\ユーザー名

自分の場合、ここに".ssh"ディレクトリを作ってconfigファイルを配置したら上手くログインできるようになりました。バンザイ。

 

EC2の環境構築でyumが使えない

環境構築の際、yumを用いて色々インストールしようとしたのですが、こんな感じのエラーが出て失敗しました。

One of the configured repositories failed (不明),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Run the command with the repository temporarily disabled
            yum --disablerepo=<repoid> ...

     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:

            yum-config-manager --disable <repoid>
        or
            subscription-manager repos --disable=<repoid>

     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again

 

自分の場合、セキュリティグループのアウトバウンドルールでsshとhtppとhtppsしか許可していなかったことが原因でした。

以下のポートをルールに追加したところ正常にインストールできるようになりました。

  • 80/tcp
  • 443/tcp
  • 53/udp

 

「Bad owner or permissions on ~~」のようなエラーでEC2にログインできない、gitホスティングサービス(github等)との通信が上手くいかない

自分の場合は権限設定の漏れが原因でした。

このあたりの権限を見直すと上手くいく可能性があります。

// homeディレクトリ
chmod 755 /home/*username*

// .ssh ディレクトリ
chmod 700 home/*username*/.ssh

// authorized_keysファイル
chmod 600 home/*username*/.ssh/authorized_keys

// ~/.ssh/configファイル
chmod 600 ~/.ssh/config

 

master.keyの取り扱い方(Rails 5.2以降)

master.keyファイルは基本gitでは管理をしないため、手動で追加する必要があります。

以下のコマンドでmaster.keyファイルをサーバー上に手動で作成し、ローカルにあるconfig/master.keyの中身をコピペしました。

sudo vim アプリ名/config/master.key

 

unicornインストールでコケる(ローカルのWindows環境)

サーバーにunicornをインストールするためには、Gemfileに以下のような記述をする必要があります。

group :production, :staging do
  gem 'unicorn'
end

ですがローカルのWindows環境では、このまま普通にbundle installするとエラーが出ます。

どうやらunicornをインストールする際に依存関係にある"kgio"というgemが、Linux系の環境でしか動かないようなのです。

そのため、ローカルのWindows環境でbundle installをする際は以下のようなオプションを付け、developmentとtestでしか使わないgemのみをインストールするようにします。

bundle install --without production staging

unicornは本番環境でしか使わないため、開発環境にはなくても問題ありません。

※ちなみに、"bundle install" はデフォルトで" --without production" のオプションが付くようになっているため、test・development・production以外の環境を作成していない場合は問題なく "bundle install" が通ると思われます。

 

gem "pg"のインストールでコケる(サーバー側)

サーバーに予めPostgresqlがインストールされている必要があります。

以下のコマンドでPostgresqlをインストールしてから "bundle install" を実行したところ、無事 "pg" のインストールができました。

sudo yum install -y postgresql postgresql-devel postgresql-server postgresql-libs

 

gem "pg"をインストールした後は、以下のコマンドでRDSとの接続確認ができます。

psql -h [RDSのエンドポイント] -U [RDSのUsername] -d[RDSのDB NAME]

 

接続ができない場合はRDSが属するセキュリティグループのインバウンドルールに以下のような設定を追加すると解決する可能性があります。

  • タイプ:PostgreSQL
  • プロトコル:TCP
  • ポート範囲:5432
  • ソース:接続元EC2のIPアドレスまたは接続元EC2と同じセキュリティグループ

 

nginxとunicornの設定は完璧だと思われるのにサイトへのアクセスができない(アクセスが拒否される)

httpsでアクセスしている可能性があります。"http://IPアドレス" で接続できるか確認してみてください。

chromeの場合、アドレスバーにURLを入力するとデフォルトでhttpsになるため気付きにくいんですよね……。

 

Webpackerに起因すると思われる、よくわからないエラーが出る

[a2828877-4ccf-4fe7-9032-afd9a7d9afe9] ActionView::Template::Error (Webpacker can't find application in /var/www/rails/appname/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacker's config/webpacker.yml file.
4. Your webpack configuration is not creating a manifest.
Your manifest contains:
{
}
):

Webpackerのコンパイルが上手くいっていない時に出る場合が多いようです。

 

以下を試すと解決するかもしれません。

rails webpacker:install
rails webpacker:compile

 

よくわからないがとにかくエラーが出てて死にそうなのでログを見たい

恐らく下記のどこかに見慣れたエラーログが出ています。自分の場合はproduction.logを見ながらなんとか解決していきました。

$ sudo tail -f /var/log/nginx/access.log 
$ sudo tail -f /var/log/nginx/error.log 
$ sudo tail -f log/unicorn.log
$ sudo tail -f log/staging.log
$ sudo tail -f log/production.log

 

原因を見つけたらローカルで修正してコミットしてpushしてサーバーでgit pullして、

git pull origin ブランチ名

 

unicornのプロセスIDを確認して、

ps -ef | grep unicorn | grep -v grep

 

プロセスIDを基にunicornをkillして、

kill -QUIT プロセスID

 

unicornを立ち上げて、

bundle exec unicorn_rails -c /var/www/rails/アプリ名/config/unicorn.conf.rb -D -E 環境名

 

nginxを再起動したら、

sudo nginx -s reload

 

きっとなんとかなります。きっと。

 

おわりに

デプロイ作業、本当に大変ですよね。

この記事がどなたかのお役に立てれば幸甚です。上手くいくことをお祈りしております。

Writerこの記事をかいたひと

みなせしゅん

ディレクター/エンジニア/デザイナー/

1994年生まれ、千葉県育ち。2019年より個人事業主として活動。
プランニングやディレクション、フロントエンドやバックエンドのコーディング・プログラミング、WEBデザインからグラフィックデザインまで、わりとなんでもやる人。

Related Topics関連記事

【iOS対応】背景を固定する際に「background-attachment:fixed」が効かない問題への対処法

開発ブログ

2025.06.23

【iOS対応】背景を固定する際に「background-attachment:fixed」が効かない問題への対処法

【CSS】Safariでmix-blend-modeがoverflow: hiddenによって効かなくなる場合の対処法

開発ブログ

2024.10.20

【CSS】Safariでmix-blend-modeがoverflow: hiddenによって効かなくなる場合の対処法

bundle install の際 psychのインストールに失敗する 【Windows + Ruby3.2以降 + Rails7】

開発ブログ

2023.12.23

bundle install の際 psychのインストールに失敗する 【Windows + Ruby3.2以降 + Rails7】

【コピペでOK】JSとCSSで背景にランダムで斜線が降り続けるアニメーションを作ってみた

開発ブログ

2021.05.24

【コピペでOK】JSとCSSで背景にランダムで斜線が降り続けるアニメーションを作ってみた

< PrevBack to listNext >