Rails - запросите другую базу данных mysql к стандартной базе данных приложения - PullRequest
0 голосов
/ 14 мая 2018

Я использую Rails 2.2.2 и Ruby 1.8.6 с устаревшим приложением, с MySQL. (пожалуйста, не говорите мне, что мне нужно обновить ruby ​​/ rails).

У меня есть резервные копии нашей действующей базы данных, установленные как разные базы данных в моем локальном MySql. Иногда это полезно для запроса исторических данных, так как это не всегда сохраняется в нашей активной базе данных.

То, что я хотел бы сделать, это что-то вроде

school_ids = [123, 456, 789]
signin_counts = {}

#collect current data
school_ids.each do |school_id|
  signin_counts[school_id] ||= {}
  signin_counts[school_id][:now] = ActiveRecord::Base.connection.select_value("select count(*) from sign_ins where school_id = #{school.id}").to_i
end

#switch to the old database - how to do this?
CURRENT_DB = "my_old_backup_db_name"
school_ids.each do |school_id|
  signin_counts[school_id] ||= {}
  signin_counts[school_id][:then] = ActiveRecord::Base.connection.select_value("select count(*) from sign_ins where school_id = #{school.id}").to_i
end

#switch back
CURRENT_DB = "my_regular_db_name"

Кто-нибудь знает, как сделать CURRENT_DB = часть? Спасибо

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Благодаря комментарию @ DaveGoldberg я сделал эти два метода, которые иллюстрируют, как это сделать.Очевидно, есть более чистые способы упаковки, я просто хотел показать один простой способ.

def use_old_db
  config = {
    :adapter => 'mysql',
    :host => 'localhost',
    :username => 'my_username',
    :password => 'my_password',
    :database => 'name_of_database'
  }
  ActiveRecord::Base.establish_connection(config)
end

def use_new_db
  ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
end
0 голосов
/ 14 мая 2018

Если вы находитесь в файле модели, который наследует ActiveRecord::Base, вы можете сделать:

  mysql_database = establish_connection (
    adapter: "mysql",
    host: "your_db_host",
    username: "your_db_username",
    password: "your_db_password",
    database: "your_db_name"
  )

Этот пост содержит хорошее объяснение того, как использовать establish_connection http://ilikestuffblog.com/2012/09/21/establishing-a-connection-to-a-non-default-database-in-rails-3-2-2/ ивозможно, достаточно старый, чтобы соответствовать вашей версии Rails, однако многое изменилось между версиями 2 и 3

...