Получение данных из внешней базы в Rails №2

244
26 ноября 2016, 20:09

По ссылке уже задавал вопрос. Все получилось, но. Прописываю параметры подключения к внешней базе:

class AmethystModel < ActiveRecord::Base
@amethyst_conn = ActiveRecord::Base.establish_connection
(
 {
  :adapter => 'mysql2',
  :database => 'RemouteDB',
  :host => 'examle.remoutehost.com',
  :username => 'root',
  :password => "root"
 }
)
end

Потом пытаюсь воспользоватся этим соединением:

def self.get_all_from_amethyst
  sql = sanitize_sql(["SELECT * from RemouteDB.param_delay order by sequence"])
  @all_amethyst = @amethyst_conn.connection.execute(sql)
end

Но, проблема в том, что он все-равно пытается выполнить этот запрос, используя базу, прописанную в database.yml. Соответственно выдает ошибку:

ActionView::Template::Error (Mysql2::Error: Table 'RemouteDB.param_delay' doesn't exist: SELECT MAX(sequence) as max from RemouteDB.param_delay)

Почему не воспринимаются параметры соединения, преданные в ActiveRecord::Base.establish_connection? Мне необходимо задавать параметры подключения именно так, не используя database.yml приложения.

UPD: Есть готовое Rails приложение (Redmine), у которого есть ряд моделей (Issue, Project, User, Token, etc). Мне нужно добавить туда свою логику. Есть некая внешняя база из которой мне надо получить данные. Эта база никак не связана с базой приложения. Так вот, я создал модель:

class AmethystModel < ActiveRecord::Base
  self.abstract_class = true
  @amethyst_conn = ActiveRecord::Base.establish_connection :external

  def self.get_all_from_amethyst
     sql = sanitize_sql(["SELECT * from Amethyst.param_delay order by sequence"])
      @all_amethyst = @amethyst_conn.connection.execute(sql)
  end
end

Параметры external описал в database.yml. Где я описал ряд методов для работы с данными из этой таблицы. Также я создал view и контроллер для работы с данной моделью. Однако, после данных действий все приложение перестало работать, выдается ошибка:

Processing by WelcomeController#index as HTML
Completed 500 Internal Server Error in 4ms (ActiveRecord: 2.8ms)
ActiveRecord::StatementInvalid (Mysql2::Error: Table 'amethyst.tokens' doesn't exist: UPDATE `tokens` SET `tokens`.`updated_on` = '2016-10-18 14:30:29' WHERE `tokens`.`user_id` = 2921 AND `tokens`.`value` = 'fbb2e4ece07e76e9f5605ffb9549607a37b51b1a' AND `tokens`.`action` = 'session'):
app/models/user.rb:414:in `verify_session_token'
app/controllers/application_controller.rb:77:in `session_expired?'
app/controllers/application_controller.rb:67:in `session_expiration'
config/initializers/ntlm-sso.rb:31:in `call'

Предпологаю, из-за того, что во внешней базе нет таблицы tokens, но ее там и не должно быть, она никак не связана с приложением, мне просто нужно оттуда получить данные. На PHP это было написано просто:

 $redmine_conn = new mysqli("examle.remoutehost.com", "root", "root", "RemouteDB");

этого было достаточно, это подключение никак не контактировало с текущим, которое использует приложение.

READ ALSO
Прогресс выполнения запроса в MySQL

Прогресс выполнения запроса в MySQL

Существует ли возможность в MySQL получить информацию о прогрессе выполнения длительного запроса? Интересна информация о том, сколько осталось...

233
Есть ли способ узнать, сколько записей было вставлено командой INSERT IGNORE?

Есть ли способ узнать, сколько записей было вставлено командой INSERT IGNORE?

Есть ли способ узнать, сколько записей было вставлено командой INSERT IGNORE? Сколько строк было добавлено или сколько проигнорировано?

291
Для движка интернет-магазина: MyISAM или MyISAM?

Для движка интернет-магазина: MyISAM или MyISAM?

Для движка интернет-магазина (php) какой тип таблиц лучше делать: MyISAM или MyISAM ?

434
Безопасно ли удалить файл логов general_log.txt?

Безопасно ли удалить файл логов general_log.txt?

При выполнении запроса со вставкой данных большого объёма SQLyog начал вылетать с ошибкой:

256