Как я могу запустить НЕКОТОРЫЕ инициализаторы при выполнении Rails assets: precompile?

Фон

У меня есть приложение, которое я недавно обновил до 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 трубопровод встроен в стек кедра. Когда вы отправляете приложение в 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! ?

17
задан lucapette 10 February 2012 в 21:50
поделиться