2011-06-24 14 views
16

Actualmente estoy usando guard, es decir, guard-coffeescript gem para compilar mi javascript (y en el futuro probablemente añadiré algunas tareas de guardia más) en mi sistema de desarrollo OSX. He añadido la gema rb-fsevent a mi gemspec, ahora vi que en una gran cantidad de Gemspecs se añade con una sentencia if como esta:Error de Bundler en la implementación

gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i

Tratando de implementar en mi entorno de ensayo/producción, que se ejecuta en Linux , la secuencia de comandos se ejecuta en el servidor utiliza los bundle install --deployment resultados en siguiente excepción:

# bundle install --deployment 
You have modified your Gemfile in development but did not check 
the resulting snapshot (Gemfile.lock) into version control 

You have deleted from the Gemfile: 
* rb-fsevent

¿hay alguna forma de evitar este problema o hacer sólo tengo que quitar el caso para que pueda implementar en mi sistema y, a su vez la instalación una joya que es inútil en una plataforma que no sea OSX?

-

edición: corro bundle install antes de desplegar a mi entorno de ensayo y corro bundle check después de la primera vez que falló. Lo tengo funcionando después de eliminar la declaración if ...

+0

No entiendo por qué la condición if RUBY_PLATFORM no está en la Gemfile.lock? Cuando haces bundle install en el servidor, ¿no solo mira Gemfile.lock? – jspooner

Respuesta

23

Tuve un problema similar. Si está utilizando Capistrano se puede establecer la siguiente opción:

set :bundle_without, [:darwin, :development, :test] 

luego envolver su línea joya 'rb-fsevent' en un grupo llamado Darwin. Algo como esto debería funcionar muy bien:

group :test, :darwin do 
    gem 'rb-fsevent' 
end 

Esto hace bundler hacer esto en el servidor:

bundle --without darwin development test 

Lo que significa que no tiene en cuenta esos grupos en el Gemfile.lock. Lo que estaba haciendo haría que su máquina OS X y su servidor aparecieran con diferentes archivos de bloqueo resultantes. Por eso fue quejándose.

+1

gracias por la sugerencia, realmente parece que no hay forma de cómo hacerlo con bundle install --deployment. – Mark

+1

Eso me dio un error por alguna razón, pero esto funcionó 'set: bundle_without,% w {darwin development test} .join ('')'. Podría ser una cosa capistrano 3. – counterbeing

+0

Tome la recomendación de @David en serio y elimine ': require => false si RUBY_PLATFORM = ~/darwin/i' –

6

Tuve exactamente el mismo problema y la solución de Luke me lo arregló, sin embargo, solo después de eliminar la cadena :require => false if RUBY_PLATFORM =~ /darwin/i que se usa comúnmente.

2

Como se describe en

https://github.com/guard/guard

la solución es simplemente

group :development do 
    gem 'rb-inotify', :require => false 
    gem 'rb-fsevent', :require => false 
    gem 'rb-fchange', :require => false 
end 
+0

Esto funcionó para mí (simplemente quitando la parte' if RUBY_PLATFORM ... 'de la línea). – benzado

Cuestiones relacionadas