Как правильно разместить приложение Rails 3.1 под подчиненным URI, используя lighttpd и thin? - PullRequest
2 голосов
/ 08 января 2012

Раньше было легко до Rails 3.0: "thin --prefix = / foobar" - это все, что было нужно. Для тех, кто использует Passenger Phusion, есть RackBaseURI - но я использую Lighttpd + Thin, комбинацию, которая уже не так популярна.

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

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

Ответы [ 3 ]

1 голос
/ 04 февраля 2015

Для Rails 4.2:

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

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

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

    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 голосов
/ 20 марта 2012

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

0 голосов
/ 11 января 2012

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

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

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