ruby on rails - para - Bundler: Estás intentando instalar en modo de implementación después de cambiar tu Gemfile
instalar ruby on rails en windows 10 (15)
Soy bastante nuevo para bundler y capistrano, y estoy tratando de usarlos juntos. Cuando intento implementar, obtengo el mensaje:
Está intentando instalar en modo de implementación después de cambiar su Gemfile. Ejecute `bundle install ''en otro lugar y agregue el Gemfile.lock actualizado al control de versiones.
No sé cómo satisfacer el sistema que se queja, y no entiendo por qué está surgiendo la queja porque leí en el documento :
Si existe Gemfile.lock y has actualizado tu Gemfile (5), bundler utilizará las dependencias en Gemfile.lock para todas las gemas que no hayas actualizado, pero volverá a resolver las dependencias de gems que hayas actualizado . Puede encontrar más información sobre este proceso de actualización a continuación bajo ACTUALIZACIÓN CONSERVADORA.
Lo interpreto como que significa que el Bundler puede manejar el hecho de que mi Gemfile no es lo que esperaba. ¿Alguna ayuda?
Especificaciones: Ruby 1.9.3, Rails 3.2.3, Capistrano 2.12.0, Bundler 1.1.4, Windows 7, implementación en una máquina de Posix.
Editar: My Gemfile incluye bloques lógicos como los siguientes:
unless RbConfig::CONFIG[''host_os''] === ''mingw32''
# gem ''a'' ...
end
Tenga cuidado con la configuración global de Bundler.
Tenía una configuración global en mi entorno de desarrollo en ~/.bundle/config
que no tenía en mi entorno de CI / Producción que causaba que Gemfile.lock
que se generó en mi entorno de desarrollo fuera diferente al de mi CI / Entorno de producción.
En mi caso, estaba configurando github.https
como verdadero en mi entorno de desarrollo, pero no tenía esa configuración en mi entorno de producción / CI. Esto causó que los dos archivos Gemfile.lock
fueran diferentes.
Cuando ves lo siguiente ...
$ bundle install
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.
If this is a development machine, remove the Gemfile freeze
by running `bundle install --no-deployment`.
You have added to the Gemfile:
* source: rubygems repository https://rubygems.org/
* rails (~> 3.2)
. . .
... Entonces, es muy probable que tenga archivos .gem obsoletos en su directorio de proveedor / caché.
Quizás, anteriormente ejecutó $bundle install --deployment
que puso algunos archivos .gem "obsoletos" en el caché.
En cualquier caso, puede superar este error ejecutando: bundle install --no-deployment
Esa es una de las muchas cosas buenas de Rails ... los mensajes de error a menudo te dicen exactamente qué hacer para solucionar el problema.
El mensaje de error que está recibiendo con respecto a Gemfile.lock
puede deberse a que su Gemfile
y Gemfile.lock
no concuerdan entre sí. Parece que ha cambiado algo en su Gemfile desde la última vez que ejecutó la bundle install
(o la update
). Cuando haces un bundle install
, actualiza tu Gemfile.lock con cualquier cambio que hayas hecho en Gemfile.
Asegúrese de ejecutar bundle install
localmente y de registrarse en el control de origen de su Gemfile.lock
recién actualizado después de eso. Luego intente implementar.
Editar : como se reconoce en los comentarios, un condicional en el Gemfile resultó en un Gemfile.lock válido en una plataforma, no válido en otra. Proporcionar una bandera de :platform para estas gemas dependientes de la plataforma en el Gemfile debería resolver la asimetría.
En nuestro caso, estábamos usando una función que no estaba disponible en una versión anterior de bundler que se ejecutaba en nuestra máquina de producción. Por lo tanto, fue suficiente para actualizar el paquete, es decir, hacer un gem update bundler
.
Esta podría ser una idea peligrosa, pero si debe probar algo en un entorno de implementación de producción, puede editar el archivo .bundle / config
# This value is normally ''1''
# Set it to ''0''
BUNDLE_FROZEN: ''0''
Ahora invoque el paquete, en mi caso necesitaba actualizar una gema específica, así que este es mi comando
RAILS_ENV=production bundle update <whatever gem>
Probablemente deberías volver a cambiarlo después de la actualización, para que las cosas funcionen como esperas, después. De nuevo, esto probablemente no sea compatible, y YMMV
La solución para mí fue ligeramente diferente a las otras enumeradas aquí. Estaba tratando de actualizar de sidekiq a sidekiq-pro (que requiere bundler 1.7.12+), pero seguí recibiendo el mensaje "Estás intentando instalar en modo de implementación después de cambiar tu Gemfile" de travis-ci
La inspección de la salida de la consola de travis-ci reveló que se estaba utilizando una versión anterior del bundler.
En mi caso, tuve que editar el archivo travis.yml para agregar:
before_install: - gem update bundler
Esto obligó a Travis-ci a usar la última versión de bundler e hizo desaparecer el mensaje de error.
Me encontré con algo similar antes. Una forma de solucionarlo, creo, pero puede llevar más espacio del que desea, es ejecutar
bundle install --deployment
y luego intenta desplegar. Esto hace algo así como instalar todas sus gemas en la carpeta del proveedor, lo que creo que en general es bueno evitar ... pero probablemente todavía funcione. Mi aplicación solía comportarse así, mi solución consistía en eliminar las versiones exactas para descargarlas en mi Gemfile, y luego reinsertarlas e implementarlas.
gem ''rails_admin'', :git => ''git://github.com/sferik/rails_admin.git'', :branch => ''master''
a
gem ''rails_admin''
O puede hacer lo que sugiere, y llevar su proyecto fuera del servidor de producción a una máquina local, agruparlo y luego volver a instalarlo en su servidor. Esta solución puede no ser 100% correcta, pero algunas me funcionaron ... solo pensé en compartirla. Buena suerte
Me encontré con este despliegue de una aplicación de Nesta después de algunas actualizaciones de gemas. Lo que funcionó para mí fue eliminar Gemfile.lock , ejecutar bundle install
para volver a generarlo e implementarlo de nuevo.
Me encontré con un problema similar, sin embargo, hice la bundle install
bundle update
y la bundle update
y Heroku aún rechazó mi oferta.
Solucioné el problema simplemente borrando Gemfile.lock y luego ejecutando bundle install
nuevamente. Luego agregué, me comprometí y lo envié a mi git repo. Después de eso no tuve ningún problema presionando a Heroku.
Mi problema específico estaba relacionado con lo reportado por @JoshPinter, es decir, las discrepancias del host dev-vs-deploy en el protocolo utilizado por bundler para recuperar gems de github.
Para resumir, todo lo que tenía que hacer era modificar la siguiente entrada de Gemfile
...
gem ''activeadmin'', github: ''activeadmin''
... a esta sintaxis segura ( ver referencia ):
gem ''activeadmin'', git: ''https://github.com/activeadmin/activeadmin.git''
Y mis despliegues han vuelto a la normalidad.
Otra causa del error:
Esto es un poco tonto, pero estoy seguro de que alguien más cometerá el mismo error.
Para Rails 4, Heroku agregó la gema rails_12factor. Si lo estabas usando antes de agregarlo, entonces tendrás estas dos gemas:
gem ''rails_log_stdout'', github: ''heroku/rails_log_stdout''
gem ''rails3_serve_static_assets'', github: ''heroku/rails3_serve_static_assets''
Tienes que eliminarlos cuando agregas el nuevo. (están incluidos). Creo que puedes salirte con la tuya hasta que toques las líneas en tu archivo gema, entonces Heroku nota la duplicación y grita con el error anterior.
buena suerte con Rails 4.
Tuve el mensaje de error al intentar presionar a Heroku. Encontré la siguiente solución arreglada.
- Git pull master de origen
- Estado de Git
- Git commit
- Git Push Origin Master
- Git push heroku master
para heroku, no tienes que cambiar la sintaxis en el Gemfile
. solo puede agregar BUNDLE_GITHUB__HTTPS
(tenga en cuenta el doble guión bajo) como una variable de entorno y configurarlo en true
(en el panel de la aplicación heroku en la pestaña Settings
en la sección Config Vars
). esto cambiará el protocolo de git://
a https://
para todas las solicitudes.
vi. paquete / config
cambie la opción BUNDLE_FROZEN de ''1'' a ''0''
hacer "paquete de instalación"
O
ejecutar "bundle config"
ver si el valor "congelado" es verdadero configurarlo en falso
paquete config congelado falso
rm -fr .bundle
Solucionado el problema para mí.