Rails ローカル開発環境からHerokuのDBに接続 / Rakeタスクとコンソール

Shunsuke Sawada

rakeタスクを書いて、herokuにpushしてコンソール開いて実行ってのがめんどくさいので、自分のローカル開発環境から直接プロダクションのDBをさわりたかった。チームでやってると良くないと思うけど、個人プロジェクトならまぁいいかってことで。

config/database.yml

yml
1
2
3
4
5
6
7
8
9
10
production_local:
  adapter: postgresql
  encoding: utf8
  port: 5432
  pool: 5
  database: YOUR_DB_NAME
  username: YOUR_DB_USER_NAME
  password: YOUR_DB_PASSWORD
  host: ec2-00-000-00-000.eu-west-1.compute.amazonaws.com
  sslmode: require

以下は適宜変えてください。

  
ホスト名の取得 ↓

1
$ heroku config

とすれば、HEROKU_POSTGRESQL_COLOR_URL が取得できる。
hostはここの部分。
ec2-00-000-00-000.eu-west-1.compute.amazonaws.com

コンソール

これはオプションつけて実行すればいいだけ。

1
$ rails c -e production_local

でも

1
2
3
4
5
config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:

  * development - set it to false
  * test - set it to false (unless you use a tool that preloads your test environment)
  * production - set it to true

  
と言われたので、configを足しておいた。
config/environments/production_local.rb

ruby
1
2
3
4
5
6
7
Yourapp::Application.configure do
  # Eager load code on boot. This eager loads most of Rails and
  # your application in memory, allowing both thread web servers
  # and those relying on copy on write to perform better.
  # Rake tasks automatically ignore this option for performance.
  config.eager_load = true
end
1
2
3
$ rails c -e production_local
$ Post.last
  => Herokuのデータベースのレコード

Rakeタスク

ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace :your_task do
  desc "Test task for production_local"
  task test: :environment do
    test
  end
end

# Check if production_local environment works
def test
    ActiveRecord::Base.establish_connection(:production_local)
    puts "This is test"
    post = Post.last
    puts "#{post.id} #{post.title}"
end

  
実行するとHerokuのデータベースに接続した結果が得られるはず。

1
$ rake your_task:test

以上です。

参考

heroku / アプリから別のアプリのデータベースに接続する | Workabroad.jp
rails consoleにて、dbをproductionに接続する。 - Qiita
postgresql - Connect local rails app on my laptop to heroku database - Stack Overflow
  

84
Shunsuke Sawada

おすすめの記事

acts-as-taggable-on タグを表示させる順番を決めたい
Railsを4.2にバージョンアップしたら、Vagrantのローカル開発環境にアクセスできなくなった問題
Railsのバリデーションエラー後にレイアウトが崩れるとき