2017-05-05 10 views
1

私はMySQLを使用してRailsアプリケーションを構築しましたが、性能上の理由からいくつかのモデルをPostgresデータベースに移動したいと考えています。MySQLとPostgresをRails 4アプリケーションで使用する

これらのモデルと他には何の関係もありません。 データベース全体をPostgresに移動したくありません。

これは、PG宝石をインストールした後、私のために働いていますRails: mysql & postgres at the same time in the same app?

は、今私は問題を抱えている:同じdatabase.ymlのファイルをロードし、いくつかのcronジョブは、もののので、Postgresデータベースを使用してそれらのモデルの動作を停止しましたYMLは大丈夫です、うまくインデントされ、うまく読めます。 "postgres"セクションがあり、Railsアプリケーションは正常に動作します。 postgresのホスト型モデルで

私がやる:cronジョブで次に

class Thing < ActiveRecord::Base 
    establish_connection(:postgres) 
    self.table_name = "thingies" 
end 

dbconfig = YAML::load(File.open('../database.yml'))  
ActiveRecord::Base.establish_connection(dbconfig["production"]) 
ActiveRecord::Base.establish_connection(dbconfig["postgres"]) 

その後、私は、私はこのエラーを取得するpostgresのモデルのいずれかをロードするとき

/usr/lib/ruby/gems/2.3.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/connection_specification.rb:248:in `resolve_symbol_connection': 'postgres' database is not configured. Available: [] (ActiveRecord::AdapterNotSpecified 

どうすればこの問題を解決できますか?

後で編集: これは、データベースごとに手動で接続を確立するのではなく、これを行っています。

dbconfig = YAML::load(File.open('../database.yml')) 
ActiveRecord::Base.configurations = dbconfig 

は今、上記のエラーがなくなっているが、ActiveRecordのはpostgresのへの接続を確立し、それを開いたままに表示されるMySQLのモデルは、エラーをスローします。

使用する接続を指定していないモデルで使用する接続を指定する方法はありますか?デフォルトの種類?

+0

おそらくdatabase.ymlを投稿するべきです。実際には、 "開発" "テスト"と "プロダクション"と一緒にdatabase.ymlに "postgres:"キーがありますか? (実際には、各環境、つまりpostgres_development postgres_test postgres_productionのデータベース設定が必要です) – mahemoff

+0

はい、開発、テスト、デフォルト、プロダクション、および "postgres"のキーがあります。 YMLファイルは正しく解析され、すべてが適切に指定されます。 Railsアプリケーションは100%正しく動作しますが、cronジョブのみが動作しません。 –

答えて

0

モデルをActiveRecordのサブクラスに入れ、それらのサブクラスからの接続を管理することで解決しました。

これはまた、モデルのタイプごとに数百の接続のプールを維持していた私の次の問題を解決しました。

関連する問題