#ruby-on-rails #ruby #database #activerecord
#ruby-on-rails #ruby #База данных #activerecord
Вопрос:
У меня есть приложение Rails v 2.0.2. Я хотел бы инициализировать константу в initializers / constants.rb и установить ее значение из базы данных.
что-то вроде этого:
SESSION_DURATION = SystemDB::Configuration.get('session_duration', 0).to_i.minutes
Итак, у меня есть таблица конфигурации в PostgreSQL со строкой, где name = ‘session_duration’ .
Этот код отлично работает на моем локальном ПК с Windows, но на рабочем сервере с Linux происходит сбой с ошибкой: `retrieve_connection’: ActiveRecord::ConnectionNotEstablished (ActiveRecord:: ConnectionNotEstablished)
Мне кажется, что в то время, когда rails инициализирует константы.rb-файл ActiveRecord еще не инициализирован. Что я могу с этим сделать?
Кстати. Я использую эту константу в модуле — поэтому она должна быть инициализирована как можно скорее. (если я хорошо понимаю)
Ответ №1:
Вероятно, это не лучший способ сделать это.. Если вы хотите установить константу из поля в базе данных, то я предполагаю, что это на самом деле переменная, а не константа. Если значение изменится, ваше приложение фактически не получит изменения, пока вы не перезагрузите свой веб-сервер. Вероятно, вам лучше выполнить вызов базы данных вместо использования ссылки на SESSION_DURATION в вашем приложении.. Вызовы базы данных дешевы. Возможно, вы захотите пересмотреть свой подход.
Тем не менее, вы знаете свое приложение лучше, чем я, и может быть причина, по которой вам нужно это сделать.. Если это так, это немного запутанно, но вы всегда можете просто запросить activerecord в вашем файле констант и сначала вручную подключиться к своей базе данных..
require "rubygems"
require "activerecord"
ActiveRecord::Base.establish_connection (
:adapter => "mysql",
:host => "localhost",
:username => "user",
:password => "password",
:database => "some_database")
Всего наилучшего 😉
Комментарии:
1. Мне нужно использовать константы, и этот способ будет дублировать конфигурацию БД, что не очень хорошо, но в любом случае, спасибо.
2. Может быть, я могу поместить КОНСТАНТЫ в другой файл? но мне нужно, чтобы к этим константам можно было получить доступ в модулях (/ lib / directory)