2011-10-02 23 views
20

Estoy implementando una aplicación de rieles para un VPS con capistrano, bundler y rvm. Aquí es parte de mi deploy.rbRVM Gemset - Bundler & Capistrano en producción

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
require "rvm/capistrano"  
require "bundler/capistrano"    # Load RVM's capistrano plugin. 

set :rvm_type, :system 
set :rvm_ruby_string, '[email protected]_name' 

mi .rvmrc

rvm --create use [email protected]_name 

Cuando Me he registrado en el servidor me di cuenta de que el gemset RVM fue creado, sin embargo todas las gemas fueron instalados en/shared /bundle/ruby/1.9.1/gems --not en el gemset (/ usr/local/rvm/gemset)

Uso RVM en desarrollo y creo que es genial, pero cuando llega el momento de implementarlo en producción. ¿Cuáles son las mejores prácticas? ¿Hay alguna manera de decirle a bundler que instale las gemas en el gemset?

¿Necesito siquiera un gemset? (Parece que el bundler ya está aislando las gemas), ¿me estoy perdiendo algo?

Por favor, ayúdame a entender!

Muchas gracias

Respuesta

17

utilizo RVM en el desarrollo y la producción también. Sin embargo, mientras uso gemas en desarrollo para separar gemas entre mis proyectos de rieles, solo uso RVM para instalar rubies en mi VPS de producción y dejo que Bundler maneje las versiones de mis gemas.

El uso de la integración de bundler a través de require "bundler/capistrano" configura automáticamente algunas cosas para bundler. Puede ver el código detrás de esto en Bundlers Github page. Los ajustes básicos son tan ese paquete se ejecuta este comando:

bundle install --gemfile Gemfile --path shared/bundle --deployment --quiet --without development test 

Como se puede ver, se dan las banderas --deployment y --path, que dice Bündler para agrupar sus gemas con su aplicación en el directorio shared/bundle, y sólo utilizar el versiones especificadas en su Gemfile.lock (es decir, las versiones que están trabajando en el desarrollo). Dado que el directorio del paquete se comparte entre las implementaciones, me parece que es más fácil usar gemas RVM para cada aplicación.

Puede encontrar más información sobre esta configuración en this tutorial. Si aún quieres poner gemas en gemas separadas, recomiendo this tutorial from Darcy Laycock para leer más.

+1

¡Gracias por la información! Dejo que bundler maneje las gemas para cada uno de mis proyectos y hasta ahora funciona de maravilla. – Jazmin

+0

+1 en RVM en desarrollo, bundler en producción. Estoy usando este método para ejecutar múltiples aplicaciones de ruby ​​en el único host, sin problemas todavía. – Soup

Cuestiones relacionadas