По ссылке уже задавал вопрос. Все получилось, но. Прописываю параметры подключения к внешней базе:
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");
этого было достаточно, это подключение никак не контактировало с текущим, которое использует приложение.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Существует ли возможность в MySQL получить информацию о прогрессе выполнения длительного запроса? Интересна информация о том, сколько осталось...
Есть ли способ узнать, сколько записей было вставлено командой INSERT IGNORE? Сколько строк было добавлено или сколько проигнорировано?
Для движка интернет-магазина (php) какой тип таблиц лучше делать: MyISAM или MyISAM ?
При выполнении запроса со вставкой данных большого объёма SQLyog начал вылетать с ошибкой: