地方でリモートワーク

プログラミング、先物、fx,仮想通貨なんでもやります

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

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