2011-08-25 30 views
11

Tôi có một dàn dựng và môi trường sản xuất trên ứng dụng đường ray 3.1rc6 sử dụng tên miền phụ. Tôi đã mua và cấu hình các tên miền khác nhau cho các môi trường này, bởi vì mặc định something-something.herokuapp.com không chơi độc đáo với các tên miền phụ.Định cấu hình session_store.rb để xử lý dàn dựng và sản xuất?

Khi tôi đặt session_store.rb này cho một môi trường, tất cả mọi thứ hoạt động tốt:

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

Nhưng tôi dường như không thể thêm vào một điều kiện để cho phép các tên miền với môi trường cụ thể.

Tôi đã thử

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? 

mà không hoạt động.

Trả lời

6

Bạn có thể sử dụng :domain => :all tùy chọn. Bạn cũng có thể cung cấp một :tld_length, nếu khác với 1.

AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => :all 

Đây là Rails có liên quan đang

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 

Nếu không, bạn cũng sẽ có thể ghi đè lên các thiết lập trong file trên per- cơ sở môi trường.

+0

Bẻ khóa, cảm ơn rất nhiều. – snowangel

+2

Nghĩ rằng tôi sẽ thêm vào đây vì câu trả lời này đã giúp tôi. Nếu bạn đang phát triển với tên miền trợ giúp lvh.me cho tên miền phụ của bạn, nó được diễn giải qua DOMAIN_REGEXP như là một TLD và do đó sẽ không bắt chước example.com, thay vào đó nó hoạt động như example.com.au vì vậy bạn cần phải vượt qua tld_length của 1 [Github source] (https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/cookies.rb#L103) – toxaq

16

Các cài đặt sau đã làm việc tốt cho tôi:

config/môi trường/staging.rb

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

config/môi trường/production.rb

AppName::Application.config.session_store :cookie_store, :key => '_sample_app_session' , :domain => '.myproductiondomain.com' 
+0

Tùy chọn này cũng phù hợp với tôi - cảm ơn. – snowangel

+0

Vui lòng đánh dấu câu trả lời là đã chấp nhận :-) –

+0

Xin lỗi - Tôi chỉ có thể chọn một câu trả lời! Tôi upvoted bạn bằng cách bồi thường ... – snowangel

Các vấn đề liên quan