0

プロジェクトをRails3.0.9からRails3.2.5にアップグレードする作業をしています。私は複数のデータベースを使用しており、Rails 3.2.5で移行を実行すると、すべてが正常に実行されますが、対応するデータベースではなく、デフォルトのデータベースで作成されます。

接続プールの問題だと思いますが、接続プールのバグはrails3.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

移行を計画しているDBは、developmentキーの下(新しい環境を作成する場合を除く)で指定する必要があり、古いDBは、たとえばold_dbymlファイルの下で指定する必要があります。

次に、次の内容でフォルダに作成することlegacy_base.rbをお勧めします。models/

class LegacyBase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection :old_db # points to your legacy DB
end

次に、古いDBに属するモデルごとに、次のものを置き換える必要があります。

class SomeModel < ActiveRecord::Base

と:

class SomeModel < LegacyBase

このように、「遺産」はレガシーDBを使用し、新しく作成されたモデル/移行はトリックなしで新しいDBを使用します。

私はあなたの意図を理解したと思います。

于 2012-06-11T17:57:40.040 に答える