¿Cuál es el mejor flujo de trabajo para actualizar / implementar una aplicación de Rails a través de Git?

Acabo de implementar mi primera aplicación Ruby on Rails en un VPS en Digital Ocean.

Para comenzar rápidamente, hice esto simplemente arrastrando mi tree de directorys de Rails (y sus files que lo contienen) al server a través de (S) FTP.

Sé que esta no es la mejor solución a largo ploop. Entonces, ¿cómo puedo vincular mi aplicación en el server a mi repository de git en GitHub?

Idealmente, cuando trabajo en mi aplicación localmente, y luego git commit y git push en mi repository de git, mi aplicación en el VPS también se actualizará automáticamente.

¿Cómo se puede lograr esto o cuál es la mejor estrategia para lograr esto?

Como estoy comstackndo esta aplicación solo, probablemente pueda mantener las cosas simples y mantener una sola twig master , en lugar de tener múltiples twigs.

Gracias por cualquier ayuda.

Si yo fuera tú, haría la extracción y la actualización en el control remoto manualmente. Disculpe, pero esta no solo es una buena práctica, sino que también lo forzará a aprender algo útil sobre la administración del sistema y no requiere que dependa de un host, pero puede cambiar la configuration y el proveedor de services tan fácilmente como para hacer un git. -clon en otro lugar.

Entonces mi flujo de trabajo sería:

Cliente:

 # Do some changes, commit and add a nice message $ git commit myfiles # Push to remote once I'm happy. $ git push # SSH to server, and continue from there. $ ssh username@server 

Servidor:

 # Enter project directory $ cd /var/www/myproject # Pull code $ git pull 

Hecho. O tal vez terminar refrescando el contenedor del server (uWSGI, fcgi, gunicorn, ¿qué has …)

Leyendo otras respuestas similares, insinúan que deben mirar el siguiente recurso usando Capistrano:

Documentación de Capistrano en GitHub

Deberías dedicar un poco de time a configurar implementaciones con algo de automation. Ya que estás utilizando Rails, debes probar Capistrano Gem

Capistrano lo ayudará a implementar y mantener su aplicación con solo unos simples commands. El file Léame le mostrará cómo comenzar, pero, en general, agregará la Gema al agregar esto a su Gemfile:

gem 'capistrano', '~> 3.2.0'

luego ejecute bundle install para instalar Capistrano en su package. Si aún no está usando bundler, debería comenzar.

luego ejecute bundle exec cap install para configurar su repository local para Capistrano.

Básicamente, ahora tiene una buena estructura para las secuencias de commands de implementación como parte de su repository. Deberá escribir algunos scripts de implementación ahora o modificar los ejemplos.

Una vez hecho esto, Capistrano lo ayudará a implementar un nuevo código (una vez confirmado y enviado a su repository remoto) y reiniciará los services.

Depende del service que esté utilizando para publicar su aplicación. Dependiendo del proveedor, pueden o no proporcionar el service de Rails. Por ejemplo, un sitio como Heroku, donde puedes alojar de manera gratuita hasta ciertas restricciones, está accesible a través de github y puedes hacer exactamente lo que estás diciendo y solo upload y publicar.

Si puede poner su repository en su server, puede configurar ganchos post-receive para llevar su twig al directory de su aplicación web.

Para hacerlo, debería crear un repository simple en su server, agregarlo como un control remoto en su máquina de desarrollo y luego (en su server) crear el file /my/app.git/hooks/post-receive y agregar estas líneas:

 #!/bin/bash #CONFIG LIVE="/home/saintsjd/www" read oldrev newrev refname if [ $refname = "refs/heads/master" ]; then echo "===== DEPLOYING TO LIVE SITE =====" unset GIT_DIR cd $LIVE git pull origin master echo "===== DONE =====" fi 

Código del Despliegue Automatizado de Aplicaciones PHP usando git , por Jon Saints.

Tenga en count que sería posible hacer algo como esto sin poner el repository en su server si utiliza los webhooks de Github ( https://developer.github.com/v3/repos/hooks/ ).

Sin embargo, recomiendo usar Capistrano ( https://github.com/capistrano/capistrano ), que puede implementar su código de aplicación y ayudarle con muchas tareas administrativas (como reiniciar el server, etc.).

Si quieres mantenerte relativamente cerca de git, también puedes consultar la gem git-deploy .