0

Я работаю над приложением с различными приложениями rails. Мы двигаемся быстро и часто нажимаем код на каждый из них ... и каждый стек зависит от другого (у нас есть внутренние API)Лучший способ управлять несколькими приложениями

В этом случае я не могу найти какую-либо статью с лучшими практиками.

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

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

+0

вы об этом http://ru.wikipedia.org/wiki/Stack_%28abstract_data_type%29 – IS04

+0

Извините за путаницу ... стеками Я имел в виду приложения, только что отредактированные, чтобы сделать его более читаемым – Elie

+0

@Elie these приложения взаимосвязаны или отличаются? – Mandeep

ответ

0

Вы хотите использовать git нажать приложения на сервер, много how Heroku does it

Мы достигли этой функциональности на собственном стеке в Rackspace, в котором мы должны были сделать несколько важных вещей, чтобы GTE это работает ,


Deploy

Как правило:

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

С этой целью я рекомендую рассматривать оба процесса отдельно друг от друга. IE вы должны только нажимать код на определенные репозитории и развертывать «приложение» по своему усмотрению.

Поскольку вы не указали какие-либо особенности своего стека, позвольте мне рассказать вам о моей интерпретации, основанной на нашей работе с нашим собственным стеком RackSpace.


Гит

Костяк то, что вы ищете, git - который даст вам возможность выполнять "single click deploy":

enter image description here

Хитрость заключается в том, чтобы создать a bare репозиторий на вашем сервере (почти так же, как Github & Heroku do), а затем дает вам abili чтобы «нажимать» ваш код на эти крючки.Чтобы сделать это, вам нужно сделать несколько вещей (а именно создать git репо, маршрут на своем сервере, а затем создать любое post-receive hooks для управления развертыванием):

-

Bare Repo

Первый шаг заключается в создании bare repo, что может быть сделано очень просто

Если вы SSH в экземпляр EC2, просто запустите следующую команду:

$ git init --bare /git/your_app.git 

Это даст вам репозиторий, в котором вы сможете «надавить» ваш код. Разница между этим и рабочим репозиторием заключается в том, что у голого не будет никаких файлов - просто ссылки & другая информация. Уловка - use a hook, чтобы создать рабочий каталог, который затем можно использовать для запуска приложения.

Голый репо позволит вам нажать код, который вам нужен, и, по сути, предоставить вам функциональность, которую обладают Github & - возможность «отправить» ваш код на сервер лаконично.

-

Хост

Во-вторых, вы тогда должны быть в состоянии «маршрут» любые запросы на этот мерзавец репо, и по-видимому, другие Git репо у вас тоже. Для этого вам нужно будет захватить любые запросы с вашего веб-сервера. Вот как сделать это с Nginx:

#/etc/nginx/sites-available/git 
server { 
     listen 80; 
     server_name your_domain.com; 
     root /git; 

     auth_basic "RESTRICTED ACCESS"; 
     auth_basic_user_file /etc/nginx/.htpasswd; 

     location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive$ 
       root /gitk; 

       client_max_body_size     100M; 

       fastcgi_param SCRIPT_FILENAME   /usr/lib/git-core/git-http-backend 
       fastcgi_param REMOTE_USER    $remote_user; 
       fastcgi_param GIT_HTTP_EXPORT_ALL  ""; 
       fastcgi_param GIT_PROJECT_ROOT   /git; 
       fastcgi_param PATH_INFO     $uri; 
       fastcgi_pass       unix:/var/run/fcgiwrap.socket 
       include fastcgi_params; 
     } 
} 

Вы хотите use htpasswd to create an authentication file (не создали разрешение на это пока), который затем должен позволять обрабатывать следующие локально:

> git remote add production http://your_domain.com/your_repo.git 
> git add . 
> git commit -a -m "Production" 
> git push production master 

Это попросит вас подтвердить подлинность, на которую вам придется использовать данные, указанные в файле auth.

-

Hook

Наконец, вы затем сможете использовать многие git hooks создать механизм "развернуть". Как правило, вы будете использовать post-receive:

#git/your_app.git/hooks 
cd /app/your_app 
git --work-tree=${APP_PATH} --git-dir=${GIT_DIR} checkout -f 
bundle install 
touch tmp/restart.txt 

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

Надеюсь, это даст вам некоторые идеи!

Смежные вопросы