Obtuve el servidor con la configuración anterior.Bundler + RVM + Passenger + Despliegue de Capistrano y gemas perdidas
Esta es la parte importante de mi receta deploy.rb:
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'rvm/capistrano'
require 'bundler/capistrano'
set :rvm_ruby_string, 'ruby-1.9.2-p290'
set :rvm_type, :system
set :bundle_flags, "--deployment"
set :default_environment, {
'PATH' => ENV['PATH'],
'RAILS_ENV' => ENV['RAILS_ENV']
}
set :stages, %w(staging production)
require 'capistrano/ext/multistage'
Correr cap staging deploy
como es, conduce a un error:
* executing "cd /mnt/data-store/project/releases/shared &&
bundle install --gemfile /mnt/data-store/project/releases/shared/Gemfile
--path /mnt/data-store/project/shared/bundle --deployment --without development test"
** [out :: localhost] The --deployment flag requires a Gemfile.lock.
Please make sure you have checked your Gemfile.lock into version control
before deploying.
... rolling back ...
failed: "env PATH=... RAILS_ENV=staging rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'ruby-1.9.2-p290' -c 'cd /mnt/data-store/project/releases/shared && bundle install --gemfile /mnt/data-store/project/releases/shared/Gemfile --path /mnt/data-store/project/shared/bundle --deployment --without development test'" on localhost
Gemfile y Gemfile.lock están en el control de código fuente . Ejecuté bundle install
localmente primero para generar el archivo .lock. Pero el bundler/capistrano apunta a/mnt/data-store/project/releases/shared/Gemfile así que simplemente copié manualmente ambos archivos allí. Estoy seguro de que lo estoy haciendo mal aquí. Supongo que debería copiarse automáticamente.
implementar ejecuta de nuevo (1) y no falló en el paquete de instalación, que incluso tenía
Your bundle is complete! It was installed into /mnt/data-store/project/shared/bundle
en la salida.
PERO, una de mis tareas de límite ejecuta un rastrillo. El resultado de esto es: * No se pudo encontrar bcrypt-ruby-3.0.1 en ninguna de las fuentes * Intente ejecutar bundle install
.
Procediendo con mi aventura, descubrí que una vez que tienes .bundle/config con BUNDLE_PATH: /mnt/data-store/project/shared/bundle
Funciona. Tenía este directorio, probablemente creado por bundler, bajo /mnt/data-store/releases/shared/
, así que lo copié manualmente en la raíz de los raíles.
Ahora, rake/rails c work.
bundle show twitter
muestra .../shared/bundle/ruby/1.9.1/gems/twitter-1.7.1
.
PERO, la redistribución me lleva de vuelta a (1), porque el directorio .bundle no está allí.
preguntas de hormigón:
- ¿Es necesario crear/copia .bundle/config manualmente?
- ¿Debo copiar Gemfile/Gemfile.lock manualmente al directorio compartido? ¿Qué pasa si agrego gemas? ¿Debo tener dos copias o sincronizarlas manual o programáticamente?
- ¿QUÉ ESTOY HACIENDO EQUIVOCADO?
¡Gracias!
Gracias! Todavía no entiendo por qué 'current_release' apunta a la ruta compartida en lugar de a la versión real. – elado