背景
我有一个最近更新到 Rails 3.2.1(来自 Rails 3.0.x)的应用程序,并重构了 JS 和 CSS 资产以利用新的资产管道。该应用程序使用 Celadon Cedar 堆栈托管在 Heroku 上。
应用配置
我将特定于应用程序的配置保存在名为 app_config.yml 的 YAML 文件中,并使用初始化程序将其加载到全局 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 支持 Cedar 堆栈中内置的 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 的参数做些什么吗??