Как расширить существующую CMS Ruby on Rails для размещения нескольких сайтов? - PullRequest
0 голосов
/ 06 июня 2010

Я пытаюсь создать CMS, которую я могу использовать для размещения нескольких сайтов. Я знаю, что в конечном итоге миллион раз заново изобрету колесо с этим проектом, поэтому я думаю о расширении существующей Ruby on Rails CMS с открытым исходным кодом для удовлетворения моих потребностей.

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

Я думаю, что я могу использовать домен / поддомен, чтобы определить, какие данные отображать. Например, кто-то переходит на subdomain1.mysite.com, и приложение ищет в базе данных содержимое для subdomain1.

Проблема, которую я вижу, связана с большинством готовых решений CMS, они предназначены только для размещения одного сайта, включая тот, который я хочу использовать. Таким образом, база данных структурирована для работы с одним сайтом. Однако у меня была идея, что я могу преодолеть это, «создав новую базу данных» для каждого сайта, а затем указав, к какой базе данных подключаться, основываясь на домене / поддомене, как я уже упоминал выше.

Я подумываю о размещении этого на Heroku, поэтому мне интересно, какие у меня могут быть варианты. Я не очень знаком с Amazon S3 или Amazon SimpleDB, но я чувствую, что есть какая-то «облачная база данных», которая сделала бы это решение намного более реалистичным, чем создание новой базы данных MySQL для каждого сайта.

Что ты думаешь? Я думаю об этом неправильно? Какой совет вы можете дать в этой области?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2011

Есть плагин поддержки тем Джеймса Стюарта для Rails 2.3 и themes_for_rails gem для Rails 3 +.

Я только начал использовать версию 2.3, и пока она работает хорошо.

0 голосов
/ 06 июня 2010

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

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

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

В конце концов, вам понадобится слой косвенности для управления различными сайтами независимо от методологии. Мы закончили тем, что поместили это в саму базу данных. Если вы воспользуетесь указанным вами другим методом db-for-each-site, вместо этого вы добавите этот слой в свой код. Я не уверен, какой из них лучше.

Надеюсь, ты справишься. Я потерпел неудачу.

Кроме того, как я узнал сегодня, Heroku предлагает postgres вместо mysql для приложений rails.

...