我正在努力将我的项目从rails 3.0.9升级到rails 3.2.5。我正在使用多个数据库,当在rails 3.2.5中运行迁移时,一切都运行正常但它在默认数据库中创建的一切都是正确的,而不是它的相应数据库。
我认为连接池存在问题,但连接池的错误已修复为rails 3.1.x
这些是我的模特:
class Account < ActiveRecord::Base
establish_connection :accounts
end
class Patient < ActiveRecord::Base
end
:帐户是与其他数据库的连接,而其他类使用默认连接:
这是我的database.yml(我使用外部文件,所以我可以修改数据库连接而不更改代码)。
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: <%= database_config_file['database_dev'] %>
pool: 5
username: <%= database_config_file['username'] %>
password: <%= database_config_file['password'] %>
socket: /var/lib/mysql/mysql.sock
accounts:
adapter: mysql2
encoding: utf8
reconnect: false
database: <%= database_config_file['database_account'] %>
pool: 5
username: <%= database_config_file['username'] %>
password: <%= database_config_file['password'] %>
socket: /var/lib/mysql/mysql.sock
这是我对班级的迁移:
class CreateAccounts < ActiveRecord::Migration
def self.connection
Account.connection #Account model has a connection to the database I want
end
...
end
希望有人可以提供帮助
答案 0 :(得分:0)
您计划进行迁移的数据库必须在development
密钥(除非您要创建新环境)和旧数据库下指定 - 例如,在您的old_db
下YML文件。
然后,我建议您在legacy_base.rb
文件夹中创建models/
,其中包含以下内容:
class LegacyBase < ActiveRecord::Base
self.abstract_class = true
establish_connection :old_db # points to your legacy DB
end
然后,对于属于旧数据库的每个模型,您必须替换:
class SomeModel < ActiveRecord::Base
使用:
class SomeModel < LegacyBase
通过这种方式,您的“遗产”将使用您的旧数据库,而新创建的模型/迁移将使用您的新数据库而不会有任何技巧。
我希望我明白你的意图。