Как превратить одно-сайтное приложение в устойчивое многосайтовое без изменения кода? - PullRequest
5 голосов
/ 16 ноября 2009

Это приложение, которое мы используем внутри офиса, которое я хотел бы предложить в качестве хост-услуги для всех.

Как я могу сделать это без значительных изменений кода?

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

Таким образом, каждый экземпляр приложения будет иметь свою собственную базу данных, но все экземпляры будут использовать один и тот же код.

Единственными необходимыми изменениями в коде будет выбор базы данных.

Поддерживается ли этот подход? Я слышал, что wordpress.com делает это и предлагает несколько преимуществ. В основном я пытаюсь сделать это таким образом, чтобы избежать необходимости направлять весь мой набор запросов к базе данных на определенный сайт в той же базе данных.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 16 ноября 2009

Самый простой способ сделать это - клонировать приложение и создать другой экземпляр сервера для его обработки. Это фактически способ, которым я обращаюсь с несколькими блогами WordPress на моем сервере

Pro:

  • Этот процесс можно упростить до служебного скрипта.
  • Может быть легко поддерживаться, если для общего кода используются символические ссылки. IE: все, кроме брендинга и некоторых вещей в каталоге config.

Минусы: - Если вы используете пассажир, для каждого нового экземпляра потребуется перезапуск Apache. - То же самое, если вы используете Apache для маршрутизации поддоменов на разных виртуальных хостах в разные кластеры mongrel.

Однако лучший способ вытекает из вопроса: Rails - отдельная база данных на поддомен

Метод в принятом ответе намного надежнее. Это может потребовать больше изменений, чем вы ищете, но у него есть все преимущества без недостатков любых других методов. Каждому новому экземпляру требуется новая запись в базе данных master с именем таблицы и другой конкретной информацией об экземпляре. Вам также понадобится пользовательская задача rake для создания базы данных для каждого нового экземпляра.

0 голосов
/ 17 ноября 2009

Я бы не стал делать это с несколькими базами данных, как вы упомянули. Синхронизация всех ваших схем / миграций со всеми БД может стать болезненной.

Я бы хотел просто превратить его в мультитенантное приложение, в котором у вас есть какая-то модель «Учетная запись», и тогда все ваши существующие модели будут доступны ей… другими словами, если это приложение для блога, ваше Аккаунт has_many: сообщения и т. Д.

При таком подходе вы можете идентифицировать учетные записи по поддомену ... пусть люди выбирают свой поддомен при создании учетной записи и переходят оттуда.

Это довольно просто сделать. Если вам нужно добавить биллинг в микс, вы можете взглянуть на SaaS Railskit (который обрабатывает все элементы регистрации и субдомена) или Chargify .

Вы также можете идентифицировать аккаунты в стиле Twitter ... с помощью http://myapp.com/someuser

0 голосов
/ 16 ноября 2009

Я бы предложил переключить соединение с базой данных и добавить view_path на основе домена, я разместил код в этот вопрос .

Надеюсь, это поможет!

...