ProgateのRails編で作るtwitterライクアプリ 「Gatebook」をローカル環境で開発して、Herokuにデプロイ(公開)してみた

東京研修も残り1ヶ月を切った

東京研修も1ヶ月が過ぎました。ちょっとした機能追加、仕様変更なら時間はかかりますが、どうにか実装できるようになりました。
でも、1回もアプリを公開(デプロイ)したことがなかったので、やってみることにしました。

初めて公開したアプリはProgateのGatebook

公開したアプリはProgateで作成するアプリGateBook。

Gatebook←これです!!

Progateはサイト上でターミナル操作とソースコードを書いて学んでいくのですが、
ローカル環境(自分のmac上)で作成してみました。Gatebook上での動作とローカルでの動作は少し異なるので注意が必要です。
Herokuでのアプリ公開は想像以上にスムーズでした。他のVPSサービスだと色々な作業が必要なのですが、Herokuは本当に簡単!
少し戸惑いましたが、時間的には1時間程度でできました。とりあえず、アプリを公開したい!ってときにはおすすめです。

以下はHerokuデプロイの備忘録です。

Herokuにアカウントを作成する

Herokuコマンドをターミナルで使えるようにするためにHeroku toolbeltをインストールする

Heroku toolbeltはインストールボタンを押して展開するだけ。

デプロイするアプリのディレクトリに移動する

$ cd hoge

Herokuにログインする

$ heroku login
Email: 自分のheroku emailアドレス
Password (typing will be hidden): Herokuのパスワードを入力
Logged in as 自分のheroku emailアドレスが表示される

Heroku上にアプリの枠を作成する

ここに自分のローカルで作成したアプリをpushすることになります。

$ heroku create hoge (hogeというアプリが作成される)
$ git add .
$ git commit -am "heroku deploy" (任意のコミットメッセージ)

Herokuにアプリをpushする

$ git push heroku master

しかし、このままではエラーが起きる

! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/hoge.git'

gemfileを編集

RailsではデフォルトデータベースがSQLite3ですが、Herokuのデフォルト
データベースはpostgresqlです。
本番環境はpostgresqlを使用するように指定します。
SQLite3はdevelopment環境のみで使用するように指定します。

gemfile
group :production do
gem 'pg'
gem 'rails_12factor'
end
group :development do
gem 'sqlite3'
end

gemifileの更新

--without productionオプションをつけて、bundle installしてください。

$ bundle install --without production

assets precompileの指定

config/application.rbに追記します。

config/application.rb
module アプリ名
class Application < Rails::Application
config.assets.initialize_on_precompile = false
end
end

enviroments/production.rbに追記と変更します。

environments/prouction.rb
config.assets.compile = true #=> tureに変更
config.serve_static_assets = true #=>追加

ファイルを変更したのでgitに反映する。

ファイルを変更したのでgitに反映します。

$ git add .
$ git commit

再度Herokuにpushする

$ heroku push master

しかしログイン機能deviseが動かない。

どうやらデータベースpostgresqlがうまく機能していない様子。
heroku logsでlogを見れます。

$ vendor/bundle/ruby/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql_adapter.rb:596:in `async_exec'

ググって以下のコマンドを実行。

heroku plugins:install git://github.com/heroku/heroku-pg-extras.git
heroku pg:killall; heroku restart
heroku update
heroku pg:killall; heroku restart

postgresqlにproduction環境で接続する記載をする。

どうやらデータベースができていなかったようです。

config/database.yml
production:
adapter: postgresql
database: db_production

あとrubyのバージョンを指定

gemfile
ruby '2.2.4'

まだエラー

まだエラーが起きます。データベースはできているようですが、テーブルと
migrationができていないようでした。
以下のコマンドを打ち込みます。

heroku run rake db:setup
heroku run rake db:migrate
heroku run rake db:reset
heroku run rake db:migrate
heroku run rake db:rollback
heroku run rake db:migrate

デプロイ(公開)できました!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です