Sly*_*Sly 2 mysql activerecord ruby-on-rails-3
我正在尝试设置Rails(v3.2.2)以使用多个数据库.我这是基于这个连接Rails 3.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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
当我运行此spec文件时:
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
Run Code Online (Sandbox Code Playgroud)
像这样:
>rspec /path/to/category_spec.rb
Run Code Online (Sandbox Code Playgroud)
我明白了:
/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)
Run Code Online (Sandbox Code Playgroud)
我也尝试过像这样设置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")
Run Code Online (Sandbox Code Playgroud)
这导致了同样的例外.(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
Run Code Online (Sandbox Code Playgroud)
有用.
似乎Rails完全忽略了establish_connection ......我是否缺少一些应用程序级配置设置?如何让Rails识别establish_connection,以便我可以在不同的数据库中放置不同的模型?
非常感激!
事实证明,Rails需要存在默认配置.在这种情况下,database.yml文件仍然需要测试数据库.否则,Rails将抛出异常,因为它希望在模型初始化之前建立一些连接.加载默认配置后,Rails会继续初始化模型,然后通过establish_connection进行模型级数据库配置.
我希望这可以帮助其他人.我花了相当多的时间来运行调试器
ActiveRecord的-3.2.2/lib目录/ active_record/connection_adapters /抽象/ connection_specification.rb
弄清楚这一点.
| 归档时间: |
|
| 查看次数: |
4087 次 |
| 最近记录: |