Несколько приложений, использующих одну кодовую базу в ruby - PullRequest
1 голос
/ 10 июля 2011

Я пытаюсь получить разумное понимание того, как можно создать приложение поверх ruby ​​/ rack (или, что еще лучше, существующей инфраструктуры), которое управляет чем-то эквивалентным WordPress. В частности, с возможностью обслуживания нескольких сайтов из одной и той же кодовой базы, каждый со своими особенностями и конфигурацией.

Предположим, например:

  • example.com с использованием аутентификации, страниц, блоговых модулей
  • forum.example.com -> auth, модули форума
  • api.example.com -> auth, api modules

Этот тестовый пример работает, в том числе в производственной среде:

# test.rb
class Foo
end

# config.ru
require 'rack'

use Rack::ShowExceptions
use Rack::CommonLogger

run lambda { |env|
  case env['HTTP_HOST']
  when /^test\./
    require './test'
    # answers true, regardless of subdomain loaded first
    [200, {'Content-Type'=>'text/plain'}, "#{Kernel.const_defined? :Foo}"]
  else
    # answers false, regardless of subdomain loaded first
    [200, {'Content-Type'=>'text/plain'}, "#{Kernel.const_defined? :Foo}"]
  end
}

До сих пор, работая в основном в условиях, где мало или вообще не было состояния, я немного нервничаю, что это может вернуться и укусить меня в будущем.

В любом случае, что я пропустил / где мне ожидать, что он вернется и укусит меня? (Производительность из-за перезагрузки файлов? Пулы соединений с БД, которые при необходимости необходимо повторно инициализировать? Сеансы, которые недопустимо делятся между разными доменами? И т. Д., Кроме очевидного факта, что любое кэширование в виде статических файлов будет неуместным.)

И есть ли какое-нибудь приложение, которое позволяет делать это из коробки?

(Мое первоначальное впечатление от Rails заключалось в том, что он не подходит для такого варианта использования. Возможно, неправильно. Единственный многосайтовый плагин, с которым я столкнулся, - это разрешить example.com/site1, example.com/site2 и т. Д. )


Эти две темы иллюстрируют то, о чем я беспокоюсь:

1 Ответ

0 голосов
/ 24 июня 2013

Я думаю, вы, вероятно, несколько усложнили ситуацию.Вы можете легко указать разные субдомены для разных приложений Rails, используя конфигурацию вашего веб-сервера.Например, в Nginx вы просто создадите разные виртуальные хосты.

Если вы хотите, чтобы все модули содержались в одном приложении, вы можете иметь один виртуальный хост с поддоменом с подстановочными знаками и использовать маршрутизацию в вашемПриложение Rails для маршрутизации через поддомен к различным частям вашего приложения.Это очень хорошо подходит для архитектуры Engine .

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

Редактировать - мой ответ конкретно говорит о Rails, тогда как ваш вопрос был более общим.

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