Mysql Rails:在模型中指定不同的数据库
我正在尝试将Rails(v3.2.2)设置为使用多个数据库。我是基于这个来做这件事的 我的模型:Mysql Rails:在模型中指定不同的数据库,mysql,ruby-on-rails-3,activerecord,Mysql,Ruby On Rails 3,Activerecord,我正在尝试将Rails(v3.2.2)设置为使用多个数据库。我是基于这个来做这件事的 我的模型: class Category < ActiveRecord::Base
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
运行此规范文件时:
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
establish_connection(
:adapter => "mysql2",
:encoding => "utf8",
:reconnect => false,
:database => "main_cat",
:pool => 5,
:username => "root",
:password => "blah",
:socket => "/var/run/mysqld/mysqld.sock")
test:
adapter: mysql2
encoding: utf8
reconnect: false
database: main_cat
pool: 5
username: root
password: blah
socket: /var/run/mysqld/mysqld.sock
我得到:
/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)
我还尝试过如下设置建立\u连接:
>rspec /path/to/category_spec.rb
establish_connection(
:adapter => "mysql2",
:encoding => "utf8",
:reconnect => false,
:database => "main_cat",
:pool => 5,
:username => "root",
:password => "blah",
:socket => "/var/run/mysqld/mysqld.sock")
test:
adapter: mysql2
encoding: utf8
reconnect: false
database: main_cat
pool: 5
username: root
password: blah
socket: /var/run/mysqld/mysqld.sock
这会导致相同的异常。(未指定适配器)
奇怪的是,如果我完全放弃建立_连接,并通过database.yml文件应用完全相同的连接配置,如下所示:
>rspec /path/to/category_spec.rb
establish_connection(
:adapter => "mysql2",
:encoding => "utf8",
:reconnect => false,
:database => "main_cat",
:pool => 5,
:username => "root",
:password => "blah",
:socket => "/var/run/mysqld/mysqld.sock")
test:
adapter: mysql2
encoding: utf8
reconnect: false
database: main_cat
pool: 5
username: root
password: blah
socket: /var/run/mysqld/mysqld.sock
它起作用了
Rails似乎完全忽略了建立连接……我是否缺少一些应用程序级别的配置设置或其他什么?如何让Rails识别并建立连接,以便在不同的数据库中放置不同的模型
非常感谢 因此,Rails需要默认配置。在这种情况下,database.yml文件仍然需要一个测试数据库。否则,Rails将抛出异常,因为它希望在初始化模型之前建立一些连接。加载默认配置后,Rails稍后将继续初始化模型,然后可以通过建立连接进行模型级数据库配置 我希望这能帮助其他人。我花了相当长的时间运行调试程序 activerecord-3.2.2/lib/active\u record/connection\u adapters/abstract/connection\u specification.rb
为了弄明白这一点。出于几乎相同的原因,我遇到了相同的错误,但我确实做了一个测试:在我的数据库中配置.yml;但问题在于我在模型定义中设置了“建立连接”方法:
establish_connection 'cm_inv_mgmt_' + Rails.env.downcase
虽然我为生产/登台和开发环境提供了database.yml的部分,但我缺少了cm_inv_mgmt_测试