rails 3.2中的ActiveRecord connectionPool没有在正确的数据库中创建表

时间:2012-06-11 16:27:32

标签: ruby-on-rails activerecord rails-migrations

我正在努力将我的项目从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

希望有人可以提供帮助

1 个答案:

答案 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

通过这种方式,您的“遗产”将使用您的旧数据库,而新创建的模型/迁移将使用您的新数据库而不会有任何技巧。

我希望我明白你的意图。