Развертывание статических ресурсов только на веб-сервере с отдельным сервером приложений - PullRequest
2 голосов
/ 09 июня 2011

Использование Rails 3.0.7 и git, развертывание с помощью capistrano. Я использую разные машины в качестве веб-серверов и серверов приложений. Я не могу развернуть код приложения на веб-сервере, только статические ресурсы - в основном, public / folder.

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

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

Ответы [ 3 ]

1 голос
/ 14 июля 2011

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

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

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

Чтобы интегрировать его в capistrano, мы делаем следующее: создать эту сетевую папку в общем / public

После развертывания: update_code: перемещать контент из текущего / общедоступного в общий / общедоступный (при необходимости переопределяя файлы) удалить или переименовать текущую / публичную, а затем символическую ссылку текущую / публичную в общую / публичную

Downsides: * не удаляет старые файлы (как кто-то сказал ранее) * нет реального варианта отката (кроме повторного развертывания старой версии)

1 голос
/ 14 июня 2011

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

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

(в Apache / Passenger конфиги были бы точно такими же, вы просто не включили бы пассажиров на статическом сервере)

Это единственный простой способ сделать это .. в противном случаеу вас будет куча головных болей ..

Тем не менее я собираюсь найти способ решить эту проблему.


Если вам нужно развернуть толькостатический код, тогда я предлагаю вам создать два хранилища

  1. приложения (например, git @ myserver: app.git
  2. статических файлов (например, git @ myserver: static.git)

Теперь в вашем приложении включите git @ myserver: static.git в качестве подмодуля, смонтированного в public /

Сделав это, вы должны искать стандартные рецепты Capistrano для развертывания с помощью подмодулей git (в частности, я думаю, вы хотите хранить всеocal кеш подмодулей, обновите его, затем git submodule init как-то с этим)

Затем вы можете получить два рецепта капистрано

Я предлагаю вам проверить многоуровневое капистрано ... определение приложенияи static как два этапа

Поэтому вы можете просто указать git @ myserver: app.git в качестве хранилища для «app» и git @ myserver: static.git в качестве хранилища для «static»

тогда простой cap app deploy:migrations && cap static deploy должен сделать это.

, но помните, что они не будут одновременными

0 голосов
/ 06 декабря 2011

Лучший подход, который я придумал, - это на самом деле scp-файлы на веб-сервер.

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