2015-10-23 2 views
0

OK так что у меня есть приложение rails, назовем его «railsapp», в домене Dreamhost VPS (на котором у меня есть другие домены, некоторые «статические» и один, который служит скрипт perl/CGI).Rails routing/assets with proxied location

По очевидным причинам Пассажир не может быть запущен на порту 80, и в настоящее время служит это приложение на порту 8001. У меня есть прокси-сервер (сконфигурированного в Apache) Настройка маршрутизации запросов для http://DOMAIN/books в DOMAIN:8001/ (который, кстати, работ как DOMAIN/railsapp).

Вопросы:

1) не обслуживаемые Нет активов - запрос для таблиц стилей, несмотря на 404-х на то, что таблицы стилей делают на самом деле существуют в [railsapp]/public/assets. Я пробовал все возможные комбинации precompiling, не precompiling и т. Д., И ничего не работает.

2) Ссылки не работают правильно. Доступ к явным образом через порт 8001, ссылки работают правильно, например, DOMAIN:8001/about показывает страницу «about», а DOMAIN:8001/[railsapp]/[:id] приводит меня к соответствующему элементу. Аналогично, доступ явно (то есть, вручную вводя адрес в адресной строке), DOMAIN/books/[railsapp]/[:id] и DOMAIN/books/about работают отлично. Но ссылки на DOMAIN/books (на элементы, идентифицированные идентификатором) указывают на DOMAIN/[railsapp]/[:id], что дает мне 404; ссылка на 'about', аналогично указывающая на DOMAIN/about, также не работает.

Теперь! Если бы я бросил осторожность на ветер и переключил свой VPS на использование nginx вместо Apache, угадайте, что? Путь в основном работает! Элементы, идентифицированные идентификатором, связаны как DOMAIN/books/[railsapp]/[:id], а «about» связаны как DOMAIN/books/about, и это здорово. Единственным вопросом в приложении rails является то, что ссылки обратно в корень необъяснимо (?) Отображаются как ссылки на 127.0.0.1:8001. Это раздражает, но кажется, что это было бы тривиально исправить. Единственная проблема с этим - вы можете помнить об этом с самого начала этого сообщения. В VPS также размещен сайт, на котором используется perl/CGI, и это сломанный как ад, учитывая, что nginx на самом деле не предназначен для обработки perl/CGI. Таким образом, я придерживаюсь Apache, так что CGI остается неповрежденным.

Я проделал поиск этой проблемы, много раз, разными способами.. Я, вероятно, видел какой бы вопрос с stackoverflow или сообщение в блоге, о котором вы думаете, чтобы связать меня. Если у вас есть идеи, как исправить проблемы с путями и активами, учитывая приведенную выше информацию, дайте мне знать.

+0

Это не очень похож на 'perl' вопрос. Я также не уверен, что это действительно на тему, учитывая, что речь идет не о кодировании. – Sobrique

+0

Это не о perl - этот тег был случайным, и я удалил его. Благодарю. –

+0

В чем причина явно указывать порт? Поскольку DOMAIN/что-то ожидало бы получить доступ к порту 80. Или, где возможно, использовать относительные ссылки? – syck

ответ

3

Попробуйте application.rb внутри "класса Application < Rails :: Application":

config.action_controller.default_url_options = {host: 'DOMAIN/books', port: 80} 
config.action_controller.asset_host = 'DOMAIN/books' 
config.serve_static_files = true # for rails4; for rails3 use .serve_static_assets = true 

После этого перезапустить приложение.

Убедитесь, что приложение использует * _url-хелперы везде, а не * _path-хелперов (я. Е. Root_url вместо root_path)

+0

Хорошо, ничего себе, спасибо! Это дает мне 90% пути. У меня все еще возникают проблемы с произведенными ссылками - ссылки на root_url соответствующим образом переходят в 'DOMAIN/books', но ссылки на« about »и отдельные элементы с идентификаторами по-прежнему переходят в' DOMAIN/about' и 'DOMAIN/[railsapp]/[id] ', а не' DOMAIN/books/about' и 'DOMAIN/books/[railsapp]/[id]' соответственно. Искренне благодарен за то, что вы добрались до меня. –

+0

** Обновление: ** между вашим ответом и некоторым отключением самостоятельно, я смог рассказать, где я ошибся с моими ссылками. Приветствия. –