Вопрос по rack, ruby-on-rails, ruby, unicorn – Как заставить единорога запускать приложение Rails 3.0 по пути?

2

Я мигрирую из Passenger в Unicorn, и с Passenger я запускал свое приложение Rails 3.0 с опцией RailsBaseURI, чтобы префиксировать все URL-адреса с помощью & apos; / blah & apos; например.

Когда я запускаю одно и то же приложение под Unicorn, я передаю «путь / бла»; unicorn_rails, но сервер все еще служит вещам какHTTP: // сервер: 3000 / и т.д. / и т.д., вместоHTTP: // сервер: 3000 / л / и т.д. / и т.д. - Я вижу, что некоторые ресурсы запрашиваются через / blah / (например, файлы JS и т. Д.), Но различные ссылки по-прежнему не имеют & apos; / blah / & apos; до них.

Итак - чтобы подвести итог - как заставить Unicorn монтировать мое приложение в / blah, чтобы все запросы работали с & apos; / blah & apos; добавляется к пути, и все ссылки и ресурсы создаются с помощью '/ blah /'; к ним готов?

Спасибо

Ваш Ответ

3   ответа
3

что поместить что-то подобное в ваш config.ru должно сделать это:

require ::File.expand_path('../config/environment',  __FILE__)

run Rack::URLMap.new(
  "/blah" => Rails.application
)

untested

Это решение, вероятно, не будет работать со статическими ресурсами, обслуживаемыми непосредственно вашим клиентом.
Хмм ...... Я не хочу другой конфигурации для разработки (где никто в настоящее время не использует префикс) и развернутой ... но я думаю, я могу создать отдельный config.ru для использования Unicorn. Я попробую сразу, спасибо. Asfand Qazi
Хм .... отправка unicorn_rails флага --path приводит к тому, что ресурсы связываются как / blah / etc / etc, но другие ссылки и сам запрос по-прежнему обслуживаются через /. Ваше решение работает наоборот - ссылки и само приложение теперь обслуживаются из / blah, но ресурсы по-прежнему обслуживаются из /. Так я и сделал - и это сработало! Я все еще хотел бы более изящный способ, если у кого-то есть один - что-то, что делает оба сразу, что и было задано вопросом. Asfand Qazi
4

Чтобы приложение Rails могло обслуживать URL-адреса ресурсов и ссылок, необходимо установить переменную среды перед ее запуском:

ENV['RAILS_RELATIVE_URL_ROOT'] = '/prefix'

Затем, как сказал @ d11wtq, чтобы Rack-совместимый сервер (в данном случае Unicorn) фактически обслуживал приложение под префиксом, вы должны в файле config.ru вместо обычной строки выполнения выполнить следующий:

run Rack::URLMap.new(
  ENV['RAILS_RELATIVE_URL_ROOT'] => Rails.application
)
1

нтерфейса.

Например, с passenger + nginx вы можете использовать что-то вроде этого:

server {
    listen 80;
    server_name www.phusion.nl;
    root /websites/phusion;
    passenger_enabled on;
    passenger_base_uri /prefix;
}

Ничего не менять в исходном коде, установка в одну строку.

Но вы сказали, что используетеunicornкакой интерфейс вы используете?

Использование nginx должно быть возможно с чем-то вроде этого:

location /prefix {
    rewrite           ^/prefix/(.*)  /$1      break;
    proxy_pass        http://localhost:8000;
}
К сожалению, это не сработает, потому что ссылки, которые генерируются без префикса, я хочу. Другими словами, ссылки не будут иметь префикса / префикса / к ним, поэтому не будут работать. Мне нужно приложение, чтобы генерировать ссылки с / префиксом, а также. Asfand Qazi

Похожие вопросы