2016-04-14 25 views
1

Anlamadım. Apache ters proxy arkasında bir Rails uygulaması çalıştırmayı denedim. Ben 8080.Apache ters proxy arkasında bir alt dizindeki raylar

bundle exec unicorn -c config/unicorn.rb -E production -p 8080 

Apache Sanal Ana

ProxyPass /foo/ http://localhost:8080/ 
ProxyPassReverse /foo/ http://localhost:8080/ 

Bu temelde çalışır bağlantı noktası üzerinde Unicorn kullanıyorum. Rails uygulamasında http://domain.tld/foo/ adresine bir istek geldi. Aşağıda ApplicationController.before_filter yılında aşağıdakileri kullanarak bir kimlik doğrulama mekanizması yönlendirme olan:

Beklendiği gibi
redirect_to controller: 'sessions', action: 'index' 

, ben http://domain.tld/sessions/ yönlendirilecektir. Şimdi, tüm yönlendirmelerden açıkça bahsetmeden, Rails'i global olarak http://domain.tld/foo/sessions/'a yönlendirmek için yapılandırmak istiyorum.

config.relative_url_root = '/foo' 
config.action_controller.relative_url_root = '/foo' 

Ve bununla Unicorn başlayan:

Ben config/ortamlarında/production.rb bu kullanarak çalıştı

RAILS_RELATIVE_URL_ROOT='/foo' bundle exec unicorn -c config/unicorn.rb -E production -p 8080 

Maalesef bu işe yaramaz. Davranışı hiç değiştirmez. Yönlendirmeden önce görmek için hata ayıklama çıktısı ekledim, neler oluyor.

puts Rails.application.config.relative_url_root 
puts ENV['RAILS_RELATIVE_URL_ROOT'] 
puts url_for controller: 'sessions', action: 'index' 

Bu yazdırır: Raylar dikkate yapılandırmayı almaz neden

/foo 
/foo 
http://domain.tld/sessions 

herkes bana söyleyebilir misiniz?

cevap

0

Çözümüm var gibi görünüyor. Bu

if Rails.env.production? 
    map '/foo' do 
    run Rails.application 
    end 
else 
    run Rails.application 
end 
bu

ProxyPass /foo/ http://localhost:8080/foo/ 
ProxyPassReverse /foo/ http://localhost:8080/foo/ 

ve config.ru için apache yapılandırma değiştirmek zorunda