fluid_27’s blog

駆け出しエンジニアが頭を整理するために綴るブログ

初デプロイまでの道のり③ いったんherokuでデプロイしてみた話

 

これまでの道筋

railsで作ったアプリをAWSでデプロイを試みるも、うまくいかず。。

今回は、試しにherokuでデプロイしてみることにしました。

 

herokuでのデプロイ手順

  1. herokuに会員登録する
  2. Heroku CLI (コマンドラインインターフェース)をインストールする
  3. herokuにログインする
  4. heroku create
  5. PostgreSQLのインストール
  6. git commit実行し、git push heroku master
  7. マイグレーションを行う
  8. URLを開く

 

herokuに会員登録する

https://jp.heroku.com/home

にて会員登録

 

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

--add-platform x86_64-linux` and try again."

 

ようは

"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でもこうしてデプロイできたら。。(泣)

 

デプロイという経験はできたので、LinuxAWSの勉強に目処が着いたら、再度AWSでのデプロイ再チャレンジしてみたいと思います。

 

まだ、AWSでのデプロイへの道は続きます。