0

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

:accounts 它是与其他数据库的连接,而其他类使用默认连接:

这是我的 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

希望有人可以帮助

4

1 回答 1

0

您计划进行迁移的数据库必须在developmentkey 下指定(除非您想创建新环境)和旧数据库 - 例如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

这样,您的“遗产”将使用您的旧数据库,而新创建的模型/迁移将使用您的新数据库,而无需任何技巧。

我希望我能理解你的意图。

于 2012-06-11T17:57:40.040 回答