Help us understand the problem. What is going on with this article?

cloud9 から heroku にデプロイするまで + ごにょごにょ

More than 1 year has passed since last update.

はじめに

背景

Ruby on Rails Tutorial を始めた。
理解を兼ねて、また、いつでも取り出せるように理解/実施したことや調べたことなどを記録している。
誤って理解して怪しげなことを書いている箇所もあるに違いないです(笑

前提

cloud9 上で操作している
heroku のユーザ登録が完了している
今回のは scaffold フレームワークを使用して生成したアプリケーション

初期設定

heroku コマンドラインクライアントの準備

インストールされているか確認する

$ heroku version 

私は cloud9 を使用しているので、インストール済だったが、インストールされていない場合は、Heroku Toolbelt をインストールする必要があるらしい

heroku-toolbelt/3.43.16 (x86_64-linux) ruby/2.3.0
heroku-cli/5.8.5-614a805 (linux-amd64) go1.7.5
You have no installed plugins.

gem を整える

Gemfile を編集する

scaffold で作成した gem には、sqllite が含まれているが、 heroku では postgres を使うらしい。なので、gem を修正する。
(要確認:sqllite は無償では使えない、ということかな?)

production 環境に postgres を導入する

group :production do
  gem 'pg', '0.18.4'
end

デフォルトでは sqllite は環境によらず導入する指定となっているので、 development と test 環境に導入するように変更する

group :development, :test do
  gem 'sqlite3'
  gem 'byebug', platform: :mri
end

なお、cloud9 上にインストールする場合には、以下のように環境を指定する。(ここでは、除外する環境を指定している。)

$ bundle install --without production

heroku に cloud9 からのアクセスを許可する

heroku にログインし、ssh キーを登録する。

$ heroku login
$ heroku keys:add

heroku からメールが届いたので、ssh キーの登録に成功したようだ。

Key added to your Heroku account

heroku にアプリケーションを登録する

cloud9 から application を登録する

$ heroku create

作成された URL が表示される。※URLは適当。。

Creating app... done, ⬢ hoge-hoge-12345
https://hoge-hoge-12345.herokuapp.com/ | https://git.heroku.com/hoge-hoge-12345.git

heroku で確認する

heroku にログインすると、作成したアプリケーションが表示されている。
スクリーンショット 2017-04-12 12.28.07.png

heroku にデプロイする

cloud9 でデプロイする

heroku に リポジトリをプッシュする

$ git push heroku master

出力を眺めると、こんなことをしている様子。
1. ソースを圧縮して転送
2. コンパイル
3. bundler を使用し、依存するライブラリをインストール
4. Preparing app for Rails asset pipeline ??
5. ローンチ
6. デプロイを検証する

マイグレーションする

DB が必要な場合は、マイグレーションする

$ heroku run rails db:migrate

デプロイ結果を確認する(heroku)

heroku にログインし、アプリケーションの情報を参照すると、Actibity 欄に以下のように表示されている。
ビルド、デプロイとも成功したようだ。
スクリーンショット 2017-04-12 12.47.30.png

動作確認する

heroku create 時に表示された URL をクリックするか、heroku のアプリケーションのページから Open App
スクリーンショット 2017-04-12 12.53.14.png

heroku の Tips

アプリケーション名を変更する

$ heroku rename 新アプリ名

一意である必要があるそう。また、アプリ名に使用できる文字にも制限がある。

アプリケーションを削除する

$ heroku apps:destroy --app アプリ名

削除の実施前に確認あり。アプリケーション名を入力する必要がある。
確認不要のコマンドもある=>Herokuのアプリをターミナルで削除する

タイムゾーンを設定する

ご参考:heorkuでタイムゾーン設定

現在の時刻を調べる

 $ heroku run console
Running console on ⬢ rails-hello-20170406... up, run.3959 (Free)
Loading production environment (Rails 5.0.2)
irb(main):001:0> Time.now()
=> 2017-04-12 04:30:45 +0000

タイムゾーンを東京(UTC+9:00)に設定

$ heroku config:add TZ=Asia/Tokyo
Setting TZ and restarting ⬢ hoge-hoge-12345... done, v8
TZ: Asia/Tokyo

heroku の Activity を確認すると、タイムゾーンが変更されたと記録されている。
スクリーンショット 2017-04-12 14.04.16.png

heroku の Settings-Config Variables を見ると、タイムゾーンは Asia/Tokyo と期待通り。
スクリーンショット 2017-04-12 14.07.09.png

コンソールで表示されるタイムスタンプは変わったが、heroku のログに出力される時間は変わらず。restart しても変わらず・・

トラブルシューティング

ビルドに失敗

状況を確認する

Activity にエラーと表示されている
スクリーンショット 2017-04-12 12.57.34.png

原因を調査する

ログを見ると、 sqllite3 がサポート外だから gem のインストールに失敗したと言われている。

! Failed to install gems via Bundler.
! Detected sqlite3 gem which is not supported on Heroku:
! https://devcenter.heroku.com/articles/sqlite3
!
! Push rejected, failed to compile Ruby app.
! Push failed

原因を取り除く

この例だと、gem を修正する

再度デプロイする

$ git push heroku master

アプリケーション実行時にエラー

ログを確認する

アプリケーションページの右上、 More - View logs からログを参照する
スクリーンショット 2017-04-12 13.23.46.png

例)原因とか、エラーとなった箇所とか。

2017-04-12T04:22:42.003666+00:00 app[web.1]: F, [2017-04-12T04:22:42.003606 #4] FATAL -- : [d2afeae8-42d0-4431-9090-1d4cfaaa2fb1] ActionView::Template::Error (undefined method content' for nil:NilClass):
(中略)
2017-04-12T04:22:42.004019+00:00 app[web.1]: F, [2017-04-12T04:22:42.003955 #4] FATAL -- : [d2afeae8-42d0-4431-9090-1d4cfaaa2fb1] app/views/users/show.html.erb:15:in
app_views_users_show_html_erb_6925831790888972170147712573680'

以上

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away