Справочная информация
У меня есть приложение, которое я недавно обновил до Rails 3.2.1 (из Rails 3.0.x) и реорганизовал ресурсы JS и CSS для использования нового конвейера активов.Приложение размещено в Heroku со стеком Celadon Cedar.
Конфигурация приложения
Я сохраняю конфигурацию приложения в файле YAML с именем app_config.yml и загружаю ее в глобальную переменную APP_CONFIG с помощью инициализатора:
# config/initializers/load_app_config.rb
app_config_contents = YAML.load_file("#{Rails.root.to_s}/config/app_config.yml")
app_config_contents["default"] ||= {}
APP_CONFIG = app_config_contents["default"].merge(
app_config_contents[Rails.env] || {} ).symbolize_keys
Компиляция активов в Heroku
Heroku поддерживает конвейер ресурсов Rails, встроенный в стек Cedar.Когда вы отправляете приложение в Heroku, оно автоматически вызывает rake assets:precompile
на сервере в качестве шага в процессе развертывания.Однако это происходит в изолированной среде без доступа к базе данных или с обычными переменными ENV.
Если приложению разрешено нормально инициализироваться во время предварительной компиляции ресурса, выдается ошибка при попытке подключения к базе данных.Это легко решить, добавив в файл application.rb следующее:
# Do not load entire app when precompiling assets
config.assets.initialize_on_precompile = false
Моя проблема
Когда установлено initialize_on_precompile = false
, ни один из инициализаторов в config/initializers/*
не запускается.Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно, чтобы переменная APP_CONFIG была доступна во время прекомпиляции ресурса.
Как можно загрузить load_app_config.rb
во время компиляции ресурсов без инициализации всего приложения?Могу ли я что-то сделать с параметром group
, переданным Rails :: Application.initialize!