複数のデータベースを使用するようにRails(v3.2.2)を設定しようとしています。これは、複数のデータベースを使用したこのConnectingRails3.1に基づいて行っています。
私のモデル:
class Category < ActiveRecord::Base
establish_connection :category_database
self.primary_key = "cat_id"
validates_presence_of :name, :display_name, :description, :icon, :image, :parent_category_id, :create_time
end
database.yml:
category_database:
adapter: mysql2
encoding: utf8
reconnect: false
database: main_cat
pool: 5
username: root
password: blah
socket: /var/run/mysqld/mysqld.sock
このスペックファイルを実行すると:
require 'spec_helper'
describe Category do
puts "ENV: #{Rails.env}"
it { should validate_presence_of :name }
it { should validate_presence_of :display_name }
it { should validate_presence_of :description }
it { should validate_presence_of :icon }
it { should validate_presence_of :image }
it { should validate_presence_of :parent_category_id }
it { should validate_presence_of :create_time }
end
このような:
>rspec /path/to/category_spec.rb
私は得る:
/home/user/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:45:in `resolve_hash_connection': database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)
また、次のようにestablish_connectionを設定してみました。
establish_connection(
:adapter => "mysql2",
:encoding => "utf8",
:reconnect => false,
:database => "main_cat",
:pool => 5,
:username => "root",
:password => "blah",
:socket => "/var/run/mysqld/mysqld.sock")
その結果、同じ例外が発生します。(AdapterNotSpecified)
奇妙なことに、私がestablish_connectionを完全に放棄し、次のようにdatabase.ymlファイルを介してまったく同じ接続構成を適用した場合:
test:
adapter: mysql2
encoding: utf8
reconnect: false
database: main_cat
pool: 5
username: root
password: blah
socket: /var/run/mysqld/mysqld.sock
できます。
Railsはestablish_connectionを完全に無視しているようです...アプリケーションレベルの構成設定などがありませんか?Railsにestablish_connectionを認識させて、さまざまなモデルをさまざまなデータベースに配置できるようにするにはどうすればよいですか?
とても有難い!