Настроить session_store.rb для обработки постановки и производства?
У меня есть промежуточная и производственная среда в моем приложении rails 3.1rc6, которое использует субдомены. Я купил и настроил разные имена доменов для этих сред, потому что по умолчанию 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?
который не работает.
Ответы
Ответ 1
Вы можете использовать опцию :domain => :all
. Вы также можете указать :tld_length
, если он отличается от 1.
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
для каждого окружения.
Ответ 2
Следующие настройки работают отлично для меня:
конфигурации/среда/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'