2012-01-08 1 views
2

Это было легко до Rails 3.0: «thin --prefix =/foobar» было всем, что было необходимо. Для тех, кто использует Passenger Phusion, есть RackBaseURI, но я нахожусь на Lighttpd + Thin, которая больше не так популярна.Каков правильный способ размещения приложения Rails 3.1 под суб-URI с использованием lighttpd и тонкого?

Я попытался начать работу с «-R config.ru» и поместить «map»/foobar «do ...» в config.rb, но это не решает проблемы с активами, все еще связанными с "/" вместо этого. Я также попытался установить «config.assets.prefix = '/ foobar», который создает правильные ссылки в HTML, но вызывает ошибки маршрутизации («Нет совпадений маршрута [GET] /application.css» - no "/ foobar" там).

Единственная комбинация, которую я нашел до сих пор, - config.assets.prefix плюс область вокруг всех маршрутов. Это кажется беспорядочным как потому, что он не СУХОЙ, а потому, что (IMHO), развертывание в разных местах, не требует от вас редактирования routes.rb. И, к сожалению, это решение не работает для производства, так как HTML будет содержать «/foobar/application.css» вместо «/foobar/assets/application.css».

ответ

0

Я считаю, что у меня была такая же проблема. Мой стек был nginx + тонкий (кластер).

В дополнение к установке префикса в приложениях тонкого конфигурационного файла, я также необходимо добавить следующую строку в моем environment.rb файл для активов, чтобы связать должным образом:

ENV["RAILS_RELATIVE_URL_ROOT"] = "/foobar" 
0

https://github.com/rails/rails/pull/3946 имеет больше информации по этой проблеме , который был исправлен в Rails 3.2.1, чтобы разрешить компиляцию активов с использованием URL-адреса среды RAILS_RELATIVE_URL_ROOT и генерировать правильные URL-адреса в активах.

1

Для Rails 4.2:

Не установлено config.assets.prefix, который представляет собой путь относительно корня. Вместо этого:

  • В application.rb установите

    config.action_controller.relative_url_root = '/foobar' 
    
  • В config.ru установите приложение, чтобы перенаправлять корень приставки, поэтому развитие соответствует продукции.

    require ::File.expand_path('../config/environment', __FILE__) 
    
    prefix = '/foobar' 
    
    map prefix do 
        run Rails.application 
    end 
    
    map '/' do 
        run ->(env) { 
        response = Rack::Response.new 
        response.redirect(prefix) 
        response.finish 
        } 
    end 
    

Запуск RAILS_ENV=production rake assets:precompile будет собирать активы в public/foobar/assets/.

Это должно работать как в производственных, так и в производственных условиях.

+0

работы, thx много! – Costa

 Смежные вопросы

  • Нет связанных вопросов^_^