在我目前的Rails项目中,我最终得到了许多特定于环境的初始值设定项,例如我的carrierwave.rb
:
对于开发,我使用类似的东西:
CarrierWave.configure do |config|
config.cache_dir = Rails.root.join('tmp', 'carrierwave')
config.storage = :file
end
对于制作我使用S3到fog
:
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指南的问题如下:
如果您愿意,可以使用子文件夹来组织初始化程序,因为Rails将从初始化程序文件夹中查看整个文件层次结构。
答案 0 :(得分:2)
您必须进入另一个目录配对,初始化程序文件夹中的所有内容都将在启动时包含在内。
如果你把上面的内容改为说..
RAILS_ROOT /配置/ env_init_files /发展
RAILS_ROOT /配置/ env_init_files /生产
然后你可以做这样的事情......
#at the end of your environment.rb
Dir["#{Rails.root}/config/env_init_files/#{Rails.env}/**/*"].each { |initializer| require initializer }
答案 1 :(得分:2)
将您的环境特定初始值设定项放在/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]
及其子目录的所有文件。
答案 2 :(得分:0)
您可以使用dotenv gem并使用环境变量来更改environemnts中的配置。
答案 3 :(得分:0)
我有Capistrano配方可以做到这一点。凭据存储在repo之外(在名为/ var / secure /的文件夹中),并在部署时符号链接到config / initializers /。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.bucky.youtubetest.MainActivity"
tools:showIn="@layout/app_bar_main">
<com.google.android.youtube.player.YouTubePlayerView
class="com.google.android.youtube.player.YouTubePlayerView"
id="@+id/view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:layout_editor_absoluteY="-6dp"
tools:layout_editor_absoluteX="126dp" />