Сконфигурировать session_store.rb для обработки и производства? - PullRequest
11 голосов
/ 25 августа 2011

В моем приложении rails 3.1rc6, которое использует субдомены, есть промежуточная и производственная среда.Я купил и настроил разные доменные имена для этих сред, потому что по умолчанию нечто-some.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?

, который не работает.

Ответы [ 2 ]

17 голосов
/ 25 августа 2011

У меня нормально работали следующие настройки:

config / environment / staging.rb

AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.mystagingdomain.co.uk'

config / environment / production.rb

AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.myproductiondomain.com'
6 голосов
/ 25 августа 2011

Вы можете использовать опцию :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 файл для каждой среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...