Вопрос по database, ruby-on-rails – Как использовать несколько баз данных в приложении Rails с использованием database.yml

5

Я прочитал документацию о том, как это сделать, но на практике у меня возникают проблемы. В моем приложении у меня есть 2 разные базы данных, как описано ниже в моем файле database.yml.

<code>sqlite_test:
    adapter: sqlite3
    database: db/sqlite_test.sqlite3
    table: plots
    pool: 5
    timeout: 5000

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: test
  pool: 5
  username: myname
  password: mypassword
  host: localhost
</code>

Мое приложение представляет собой динамический плоттер, который будет отображать данные в (базовой) базе данных, не зная, что в базе данных, или как она структурирована. Обе эти базы данных содержат разные данные. База данных SQLite, которую я создал в отдельном приложении Rails.

Текущее приложение, которое я использую, построено на базе данных MYSQL, которую я строю извне. Я скопировал базу данных SQLite в каталог / db. Так в моей основной модели, когда я говорю:

<code>  class Plot < ActiveRecord::Base

  establish_connection :development
  set_table_name "stock_test"
  set_primary_key :id
</code>

Все работает просто отлично и денди. Однако, когда я изменяю это на:

<code> establish_connection :sqlite_test
 set_table_name "plots"
</code>

и попытаться получить доступ к этой базе данных через консоль Rails, я получаю сообщение об ошибке:

<code>>>ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter
</code>

Я не знаю, почему это так, поскольку файл database.yml явно указывает адаптер? Когда я делаю это вручную в моей модели, все работает точно так, как должно.

<code>class Plot < ActiveRecord::Base
establish_connection(:adapter => "sqlite3", :database => "db/sqlite_test.sqlite3", :pool => 5 )
</code>

Почему все это работает, когда я вручную указываю что в файле database.yml, а не когда просто использую ссылку на database.yml?

Спасибо!

Ваш Ответ

1   ответ
4

Я попытался повторить и заставил это работать. Это связано с соглашениями об именах: Вы находитесь в режиме разработки, и AR будет искать тег разработки, который в вашем случае не существует для sqlite.

Вот мой database.yml:

development:
  adapter: mysql2
  database: se_development
  username: root
  pool: 5
  timeout: 5000

sqlite_development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

Вот модель:

class Plot < ActiveRecord::Base
  establish_connection 'sqlite_' + Rails.env
end

Работал на меня. Надеюсь это поможет.

это не работает, если у вас есть дваdevelopment: с другим ключом / значением?

Похожие вопросы