在我当前的 Rails 项目中,我最终得到了很多特定于环境的初始化程序,例如我的 carrierwave.rb
:
对于开发,我使用类似的东西:
CarrierWave.configure do |config|
config.cache_dir = Rails.root.join('tmp', 'carrierwave')
config.storage = :file
end
对于生产,我通过 fog
使用 S3:
CarrierWave.configure do |config|
config.cache_dir = Rails.root.join('tmp', 'carrierwave')
config.storage = :fog
config.fog_public = false
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: '...',
aws_secret_access_key: '...'
}
end
我不想使用大量的 Rails.env.development?
调用来在配置之间切换,我也不想将这个初始化程序存储在我的 environment/* .rb
文件。有没有办法,例如在 initializers
目录下为我的每个环境创建一个目录?
initializers
├── development
│ └── carrierwave.rb
├── production
│ └── carrierwave.rb
└── test
└── carrierwave.rb
根据 Rails 指南,问题如下:
You can use subfolders to organize your initializers if you like, because Rails will look into the whole file hierarchy from the initializers folder on down.
最佳答案
将您的环境特定初始化程序放在 /config/environments/initializers/[env]
下,例如 /config/environments/initializers/development
并将类似的内容添加到 config/application.rb
:
module YourApp
class Application < Rails::Application
# Load environment specific initializers from "config/environments/initializers/[current_env]".
initializer 'load_environment_initializers', after: :load_config_initializers do |app|
Dir[File.join(File.dirname(__FILE__), 'environments', 'initializers', Rails.env.to_s, '**', '*.rb')].each {|file| require file }
end
...
end
end
在加载完所有常规初始化程序后,它将需要(加载)/config/environments/initializers/[env]
及其子目录中的所有文件。
关于ruby-on-rails - 组织 Rails 初始值设定项的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7764187/