Rails ローカル開発環境からHerokuのDBに接続 / Rakeタスクとコンソール
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
以下は適宜変えてください。
- production_local(environmentの名前)
- YOUR_DB_NAME
- YOUR_DB_PASSWORD
- YOUR_DB_PASSWORD
- ec2-00-000-00-000.eu-west-1.compute.amazonaws.com
ホスト名の取得 ↓
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