我在rails 3.1rc6 app上有一个使用子域的登台和生产环境。我为这些环境购买并配置了不同的域名,因为默认的something-something.herokuapp.com不能很好地与子域名一起使用。
当我为一个环境设置session_store.rb时,一切正常:
AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.mystagingdomain.co.uk'
但我似乎无法在条件中添加允许特定于环境的域名。
我试过
AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.mystagingdomain.co.uk' if Rails.env.staging?
AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.myproductiondomain.com' if Rails.env.production?
哪个不起作用。
答案 0 :(得分:17)
以下设置对我来说很好:
配置/环境/ staging.rb
AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.mystagingdomain.co.uk'
配置/环境/ production.rb
AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.myproductiondomain.com'
答案 1 :(得分:6)
您可以使用:domain => :all
选项。如果不是1,您还可以提供:tld_length
。
AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => :all
这是相关的Rails代码
def handle_options(options) #:nodoc:
options[:path] ||= "/"
if options[:domain] == :all
# if there is a provided tld length then we use it otherwise default domain regexp
domain_regexp = options[:tld_length] ? /([^.]+\.?){#{options[:tld_length]}}$/ : DOMAIN_REGEXP
# if host is not ip and matches domain regexp
# (ip confirms to domain regexp so we explicitly check for ip)
options[:domain] = if (@host !~ /^[\d.]+$/) && (@host =~ domain_regexp)
".#{$&}"
end
elsif options[:domain].is_a? Array
# if host matches one of the supplied domains without a dot in front of it
options[:domain] = options[:domain].find {|domain| @host.include? domain[/^\.?(.*)$/, 1] }
end
end
否则,您还应该能够基于每个环境覆盖config/environments/ENVIRONMENT.rb
文件中的设置。