読者です 読者をやめる 読者になる 読者になる

heroku デプロイ 備忘録

2つの自作アプリをherokuデプロイするまでにそれぞれ異なるエラーが続出し手こずったので忘れないようにまとめます。

 

$ heroku login (herokuにログイン)

$ heroku create ex_app12345(ex_app12345という名前で作られます)

$ git add -A

$ git commit -m "heroku deploy"

$ git push heroku master  ←ここで大体エラーが出る

 

1.まずはgemfileを確認する

group :production do
gem 'pg' #herokuはpgを使います
gem 'rails_12factor'
end

⚠︎それまでsqlite3を使っていたらdevelopment環境下に移動すること

 

2. config/application.rbに

config.assets.initialize_on_precompile = false

と記述。

3. environments/production.rb

 config.serve_static_assets = true
config.assets.compile = true

追加。 

 

これでおそらくいけるはず。

 

pushが成功したら

$ heroku run rake db:migrate --app ex_app12345

を実行し

$ heroku open

デプロイ完了!!

 

二つ目のデプロイの時には

pgをbundle installしたときに

 

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***

こんなエラーが出ましたが、、、

 

$ sudo env ARCHFLAGS="-arch x86_64" gem install pg -v '0.18.4'

上記コマンドで治りました!

 

参考

ayumu-homes.hateblo.jp

 

 

後日追記

 

修正を加え再びgit push heroku masterしたところエラーが出た。

 

DEPRECATION WARNING: The configuration option `config.serve_static_assets` has been renamed to `config.serve_static_files` to clarify its role (it merely enables serving everything in the `public` folder and is unrelated to the asset pipeline). The `serve_static_assets` alias will be removed in Rails 5.0.

 

Rails5.0の仕様にするためにconfig/production.rbのconfig.serve_static_assetsをconfig.serve_static_filesに変更しろとのこと

 

cssも変更したので

$ bundle exec rake assets:precompile

をしてから

$ git add -A

$ git commit -m "deploy heroku"

$ git push heroku master

でいけます。

 

 

2016/5/26日追記

 

dbをpgではなくmysql2でherokuデプロイする方法

 

既にRailsのアプリがあることが前提とpgでデプロイしたことがある方向けに書いてありますので何卒よろしくお願いします。pgでもデプロイもしたことがない方は上部からご覧下さい。どうにかなると思います。
早速database.ymlを下記のようにしておくことで、環境変数で値を設定できるようにしておきます。

# config/database.yml

production:
  adapter:  mysql2   # postgresの場合はadapterをpostgresql
  encoding: utf8
  database: <%= ENV['DB_NAME'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  host:     <%= ENV['DB_HOSTNAME'] %>
  port:     <%= ENV['DB_PORT'] %>

 

$ heroku login

$ heroku create ex_name (この場合ex_nameという名前でheroku上に登録される)

 

$git remote -v  でリモートを確認

      heroku https://git.heroku.com/*****.git (fetch)
      heroku https://git.heroku.com/******.git (push)
      origin git@developer.exexex.jp:******/*****.git (fetch)
      origin git@developer.exexex.jp:*****/*****.git (push) 

 

みたいな感じで表示されればおk.

 

次に無料のDBを追加する

$ heroku addons:create cleardb:ignite   

 

HerokuのアプリにDB情報の環境変数を設定する

 

まずは設定を確認

$ heroku config

→ DB接続の書式が表示されるのでそれに従って各環境変数を設定する必要があります

# mysql://[username]:[password]@[hostname]/[db_name]?reconnect=true

 

上の[ ]内に対応させてそれぞれ設定していきます。

 

$heroku config:add DB_NAME="[db_name]"

$heroku config:add DB_USERNAME="[username]"

$heroku config:add DB_PASSWORD="[password]"

$heroku config:add DB_HOSTNAME="[hostname]"

$heroku config:add DB_PORT="3306" #ちなみにpgの場合は5432

 

$ heroku config  で設定を再確認する

この時、恐らくDATABASE_URLがpostgresになっているので、ここもmysql2にする必要がある。これ直さないと後で面倒くさいです。。。)

heroku config:set DATABASE_URL= 'mysql2://[username]:[password]@[host]/[database]?reconnect=true'

 

再再度確認

$ heroku config  

DATABASE_URLのところが mysql2と成っていればおk。

ついでに

Timezoneとlangの設定もしておく

$ heroku config:add TZ=Asia/Tokyo

$ heroku config:add LANG=ja_JP.UTF-8

 

ここでローカルレポジトリをherokuへプッシュ!

$ git push heroku master

$ heroku run rake db:migrate

 

$ heroku open

完了!!


後日新たなエラーが起きました
$ heroku run rake:db migrate
Running rake db:migrate on ⬢ *******app123... up, run.8832
bash: rake:db: command not found   ショック>_<
$heroku run bash --app appname
$rake db:migrate
これで治ります