Инициализировать константы значениями из БД в Rails

#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)