14

Railsアプリケーション(Herokuで実行)のステージングおよび本番環境があります。現時点では、staging.rbとproduction.rbには、各ファイルで個別に定義する必要のあるものがたくさんあります。例:

  # Code is not reloaded between requests
  config.cache_classes = true

  # Full error reports are disabled and caching is turned on
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Disable Rails's static asset server (Apache or nginx will already do this)
  config.serve_static_assets = false

  # Compress JavaScripts and CSS
  config.assets.compress = true

  # Don't fallback to assets pipeline if a precompiled asset is missed
  config.assets.compile = false

  # Generate digests for assets URLs
  config.assets.digest = true

これはではありませんDRY。設定をproduction.rbからstaging.rbに効果的にインポートしてから、ステージング環境用に変更したい設定をオーバーライドするだけのエレガントな方法はありますか?

4

2 に答える 2

19

私が過去に行ったことは、共有設定を含むファイルがあり、本番環境とステージング環境のファイルでこれを必要とすることです。これは、共通の設定を1つの場所で定義してから、個々のファイルで一意の設定を定義できるため、うまく機能しました。

config / environment / shared_production.rb

MyApp::Application.configure do
  # Code is not reloaded between requests
  config.cache_classes = true

  # Full error reports are disabled and caching is turned on
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
end

config / environment / Production.rb

require Rails.root.join('config/environments/shared_production')

MyApp::Application.configure do
  # Raise exception on mass assignment protection for Active Record models
  config.active_record.mass_assignment_sanitizer = :logger

  # Url to be used in mailer links
  config.action_mailer.default_url_options = { :host => "production.com" }
end

config / environment / staging.rb

require Rails.root.join('config/environments/shared_production')

MyApp::Application.configure do
  # Raise exception on mass assignment protection for Active Record models
  config.active_record.mass_assignment_sanitizer = :strict

  # Url to be used in mailer links
  config.action_mailer.default_url_options = { :host => "mysite-dev.com" }
end
于 2013-02-19T01:39:16.557 に答える
2

私はそれがどれほど良くなるかだと思います。これらは構成設定であり、個別に設定することを目的としています。構成で渡す関数を実際に定義できます。その関数では、デフォルトを設定できますが、私はこれを行いたくありません。プロジェクトのライフサイクルでは、5つ(または10)未満の環境でのみ作業するため、常に編集することのないこれらのファイルを最大10個必要とします。

于 2013-02-19T01:27:41.783 に答える