9

マルチデータベース Rails 3 アプリケーションに取り組んでいます。各データベースには異なるスキーマがあります (本番環境では異なる場所にあります)。次のように、さまざまなデータベースと通信するようにアプリを設定しました。

データベース.yml

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: main_development
  pool: 5
  username: someuser
  password: somepassword
  socket: /tmp/mysql.sock

other_development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: other_development
  pool: 5
  username: someuser
  password: somepassword
  socket: /tmp/mysql.sock

models/other_base.rb

class OtherBase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "other_#{Rails.env}"
end

モデル/some_model.rb

class SomeModel < OtherBase
  # Regular stuff here
end

現在、これは Web アプリでは問題なく機能しますが、テストを含む rake タスクの実行にはあまり適していません (フィクスチャが正しく読み込まれません)。これに利用できる宝石はありますか?どんな助けでも感謝します。

また、さまざまな DB のさまざまなスキーマを処理できる schema.rb ファイルを作成すると便利です。つまり、rake db:create または db:setup などを実行して、データベースを使用して複数のデータベースを作成することができます。 -固有のスキーマ。

4

4 に答える 4

4

この場合、環境の使用は受け入れられないハックだと思います。同じ環境に 2 つのデータベースが必要です。

私がその質問を自分で調査しているときに、github ユーザーrafaelchitiの要点に出くわしました。残念ながら、彼は元の要点を削除しました。ここでコピーを見つけることができます。

于 2013-08-07T11:11:54.323 に答える
1

私も同じ問題を抱えていました。30分かけて「loopy_multiple_database」プラグインを探したところ、最終的にはWebの表面から消えて、Railsのレーキタスクにモンキーパッチを適用したと結論付けました。私が修正したかった唯一のタスクはでしdb:migrateたが、同じ(醜い)プロセスで他のタスクにもパッチを当てることができます。

Rails 3で、次のようにファイルの作成を追加しますdb_migrate_override.rake(* .rake名ならどれでもかまいません)lib/tasks

Rake::TaskManager.class_eval do
  def remove_task(task_name)
    @tasks.delete(task_name.to_s)
  end
end

def remove_task(task_name)
  Rake.application.remove_task(task_name)
end

namespace :db do
  remove_task 'db:migrate'
  desc "Migrate the database (options: VERSION=x, SRCDIR=path, VERBOSE=false)."
  task :migrate => :environment do
    srcdir = (ENV["SRCDIR"] || "db/migrate/")
    ActiveRecord::Migrator.migrate(srcdir, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
    Rake::Task["db:schema:dump"].invoke if (ActiveRecord::Base.schema_format == :ruby && ENV['SRCDIR'].nil?)
  end
end

その後、実行することができます

rake db:migrate RAILS_ENV=other_development SRCDIR=db_other/migrate
于 2011-06-23T14:51:55.013 に答える
1

octopus gem ( https://github.com/thiagopradi/octopus ) を試すことができます。複数のデータベースをセットアップするのに役立ち、Rails 3.2 および Rails 4 と互換性があります。この gem を使用すると、必要なデータベースを簡単に指定できます。の移行を実行します。

于 2016-01-23T13:45:55.970 に答える
0

loopy multiple databases pluginを試すことができます。異なるレーキ構成を簡単に指定できるようです

于 2011-02-23T14:14:52.323 に答える