これまでの道筋
railsで作ったアプリをAWSでデプロイを試みるも、うまくいかず。。
今回は、試しにherokuでデプロイしてみることにしました。
herokuでのデプロイ手順
- herokuに会員登録する
- Heroku CLI (コマンドラインインターフェース)をインストールする
- herokuにログインする
- heroku create
- PostgreSQLのインストール
- git commit実行し、git push heroku master
- マイグレーションを行う
- URLを開く
herokuに会員登録する
にて会員登録
heroku CLI (コマンドラインインターフェース)をインストールする
参考にしていた教材によると、heroku CLIをインストールするにあたってnpm経由でインストールすると楽。ということなのでその方法でインストールすることに。
ちなみに、
- CLIとはコマンド操作でherokuにデプロイを可能にするためのもの。
- npm とは Node.js というプログラミング言語のためのパッケージ管理ソフトで、大抵の場合はNode.jsをインストールすると自動的にnpmもインストールされるそうです。
教材では
1. nvm をインストール
↓
2. heroku CLI をインストール
という順番でやってましたが、自分はすでにNode.jsやnpmが入っているので、1は割愛し、heroku CLIのインストールからいきます。
$ npm install -g heroku
(npmを使ってherokuをグローバルにインストール)
herokuにログインする
$ heroku login
コマンド打つと、google chromeが起動してherokuにログインします。
$ heroku create
をする。と、アプリケーションがおかれるURLと、アプリケーションの元となるgitのリポジトリが作成されます。
$ git remote -v
でgitのリポジトリが作成されたことを確認。
PostgreSQLのインストール
herokuでデプロイするにはSQLiteは使えず、PostgreSQLしか使えないので、PostgreSQLのインストールをします。
教材では以下のコマンドでインストールしていました。
$ sudo yum install postgresql-server postgresql-devel
ただ、上記はyumを使う場合。自分みたくmacの場合homebrewなどでインストールすることになると思います。
自分の場合はすでにPostgreSQLすでに入っていたので、割愛しました。
PostgreSQLに接続できるようにするために下記2点を実行。
・gem 'pg' をインストール
・config/database/ymlの記述変更
・まずはgem 'pg' をインストール
Gemfileに
gem 'pg'
group :development, :test do
gem 'sqlite3'
end
と記述。
そして、
$ bundle install --without production
実行。
ただ、この時に
"今後は bundle install --without production ではなく
bundle config set --local without 'production' を使うように"
というコメントが出てきました。
・続いてconfig/database/ymlの記述変更
config/database/yml
production:
<<: *default
adapter: postgresql
database: 任意の名前
に記述変更。
git commit実行し、git push heroku master
上記の通り、commitとpushを進めます。
が、pushしたら、herokuのversionに対してrubyのversionが対応していなかったようで、エラーが発生しました。
解決方法としては
- rubyのversionをあげる
- herokuのversionを落とす
今回はherokuのversionを落としました。
$ heroku stack:set heroku-18
再度、エラー。
Failed to install gems via Bundler.
というエラーが。
よく読んでみると、上記のエラーの前に
"Your bundle only supports platforms ["x86_64-darwin-19"] but your local platform
is x86_64-linux. Add the current platform to the lockfile with `bundle lock
ようは
"bundleは["x86_64-darwin-19"]というプラットフォームをサポートしているよ。 でも、あなたのプラットフォームは[x86_64-linux]だから
bundle lock --add-platform x86_64-linux を実行しなさい。"
というエラー文。
また、他箇所にあった
For more information see: https://devcenter.heroku.com/articles/bundler-version#known-upgrade-issues
に飛んでみると、bundleのversionごとに出るエラーが決まっているようで、
Bundler 2.2.3でローカルに生成されたアプリのGemfile.lockは、Linuxプラットフォームが明示的に「ロック」されていない限り、Herokuでは機能しない可能性があります。
$ bundle lock --add-platform ruby
$ bundle lock --add-platform x86_64-linux
$ bundle install
$ git add . ; git commit -m "Bundler fix"
と書いてある。
結論、上記の4行を実行したら解決しました。
マイグレーションを行う
$ heroku rake db:migrate
※rakeコマンドってrailsコマンドに統一されて、rails5以降は使わないんじゃ?と思ったのですが、herokuではrailsコマンド使用できないみたいなので、上記の通りのrakeコマンド実行しました。
$ heroku ps:scale web=1
ようは無料枠内に収めるためのコマンド実行。
URLを開く
$ heroku open
トップページをroute.rbで指定していないエラーになる。
その場合はトップページを指定するか、heroku openであいたページの末尾に/postsなど存在するページを指定すれば大丈夫。
無事見れました。
ということで、途中エラー発生した箇所あったものの、特別悩む部分もなく完了。
AWSでもこうしてデプロイできたら。。(泣)
デプロイという経験はできたので、LinuxとAWSの勉強に目処が着いたら、再度AWSでのデプロイ再チャレンジしてみたいと思います。
まだ、AWSでのデプロイへの道は続きます。