Инициализируйте константы со значениями из БД в Rails - PullRequest
1 голос
/ 14 октября 2011

У меня есть приложение 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 файл constants.rb ActiveRecord еще не был инициализирован.Что я могу с этим сделать?

Кстати.Я использую эту константу в модуле - поэтому она должна быть инициализирована как можно скорее.(если я хорошо понимаю)

1 Ответ

1 голос
/ 14 октября 2011

Это, вероятно, не лучший способ сделать это .. Если вы хотите установить константу из поля в базе данных, то я предполагаю, что это на самом деле переменная, а не константа.Если значение изменится, ваше приложение на самом деле не будет собирать изменения, пока вы не перезапустите веб-сервер.Возможно, вам лучше сделать вызов базы данных, чем использовать ссылку на SESSION_DURATION в вашем приложении. Вызовы базы данных дешевы.Возможно, вы захотите переосмыслить свой подход.

Тем не менее, вы знаете свое заявление лучше, чем я, и может быть причина, по которой вам нужно это сделать .. Если это так, то это немного грязно, но вывсегда может просто потребовать активную запись в файле констант и сначала вручную подключиться к базе данных ..

require "rubygems"
require "activerecord"

ActiveRecord::Base.establish_connection (
  :adapter => "mysql",
  :host => "localhost",
  :username => "user",
  :password => "password",
  :database => "some_database")

Всего наилучшего;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...