はじめに
背景
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 にログインすると、作成したアプリケーションが表示されている。
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 欄に以下のように表示されている。
ビルド、デプロイとも成功したようだ。
動作確認する
heroku create 時に表示された URL をクリックするか、heroku のアプリケーションのページから Open App
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 を確認すると、タイムゾーンが変更されたと記録されている。
heroku の Settings-Config Variables を見ると、タイムゾーンは Asia/Tokyo と期待通り。
コンソールで表示されるタイムスタンプは変わったが、heroku のログに出力される時間は変わらず。restart しても変わらず・・
トラブルシューティング
ビルドに失敗
状況を確認する
原因を調査する
ログを見ると、 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-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):
app_views_users_show_html_erb__69258317908889721_70147712573680'
(中略)
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
以上