Размещать несколько приложений Rails на одном сервере - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь разместить несколько приложений для моего блога.В некотором роде у www.blog.com/app1 будет одно приложение rails, у www.blog.com/app2 будет другое.Как мне это сделать?

1 Ответ

0 голосов
/ 09 июня 2018

Хотя я согласен с отрицательными голосами, как указано в первом комментарии, я сам столкнулся с этой проблемой несколько месяцев назад и даже не пытался ее решить, поскольку понял, какое это имеет значение.Существующие ответы о переполнении стека касаются либо немного другой, либо более узкой проблемы, поэтому они могут использовать некоторые вещи, упомянутые здесь, но не уточняют последствия или альтернативы, но есть интересный обзор (а также другой ответ на этот вопрос),В любом случае, я воспринял это как вызов и углубился в него.

Во-первых, существует несколько подходов в зависимости от вашего сценария:

  1. Все приложения - это код, который вы поддерживаете - это, вероятно, лучшийисследовать то, что называется двигателей .Они похожи на мини-приложения RoR, устанавливаемые на определенный путь в обычном приложении RoR.Он имеет много преимуществ, таких как совместное использование одной и той же среды выполнения или простой изоляции, настроенной на месте.
  2. Если нет AJAX с URL-адресами или аналогичными динамическими элементами или они фактически являются AHAH (то есть асинхронными HTML и HTTP - возвращают фрагменты HTMLвместо данных XML или JSON), что очень естественно для Rails, хотя часто не используется, вы можете использовать сложные прокси-модули, такие как mod_proxy_html , которые перезаписывают ссылки внутри документов HTML при проксировании.Подобные модули существуют для nginx, но не являются частью стандартного дистрибутива.
  3. RoR имеет опцию конфигурации relative_url_root, которая позволяет развертывание в подкаталогах .Он очень хрупкий и часто глючит, многие драгоценные камни или двигатели ломаются при его использовании, так что будьте осторожны.Когда вы понимаете это правильно, это выглядит как волшебство.Однако ваша конфигурация, относящаяся к подкаталогу, будет разбросана по разным программным конфигурациям и вашему коду.

Я создал пример репозитория во время изучения последнего варианта. README должен сказать все необходимое для запуска кода.

Самое важное замечание из этого небольшого проекта заключается в том, что при использовании относительного корня URL-адреса вы почти наверняка захотите охватить все свои маршруты.Возможны различные настройки, но они еще более сложны (что не означает, что они не имеют смысла).Примеры см. В ответе с обзором, упомянутым выше .
По умолчанию (без маршрутов с областью действия) префикс с относительным корневым URL-адресом имеет префикс только к путям ресурсов, но не пути к действующим маршрутам, даже если он создает URL-адреса, созданные помощникамибесполезен, если не переведено mod_proxy_html или, возможно, более нестандартным решением.

Другое важное замечание, которое относится к официальному руководству, коду «там» и ответам на подобные вопросы здесь, в Переполнении стека, состоит в том, что это хорошо, чтобы избежатькосая черта в начале относительного корня URL.Он ведет себя непоследовательно между тестами и остальной частью кода.Тем не менее, он может быть прекрасно использован для вашего кода - см. определение области действия в config config или тестовый пример фиктивного контроллера .


Я получил эти и другие наблюдениясоздав два очень простых и почти идентичных приложения на Rails 5.2.У каждого есть одно действие (dummy#action), маршрут которого ограничен относительным корневым URL-адресом .Это действие, или его вид специально делает две важные вещи, чтобы проверить, что все работает:

  • выводит результат вызова root_path помощника, который показывает, что мы правильно настроили URL /помощники пути (благодаря маршруту с областью действия в config/routes.rb)
  • загружает статический ресурс, который не обслуживается приложением Rails, а напрямую через Apache HTTP Server и на который ссылается image_path helper

Вы можете видеть, что конфигурация виртуального хоста имеет довольно обширный список URL-адресов, которые не следует передавать через прокси-сервер и полагаться на псевдонимы каталогов.Тем не менее, это зависит от приложения и очень настраивается, поэтому более простая настройка с другой структурой каталогов определенно достижима, но это совершенно отдельная тема.

Если вам нравится Passenger иЕсли вы не хотите использовать прокси на вашем HTTP-сервере, вы можете найти дополнительную информацию в их руководстве по развертыванию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...