2011-09-05 19 views
5

Estoy desarrollando un motor personalizado usando this setup.Guardia no ve las actualizaciones de archivos

He creado el motor con

rails plugin new MyEngine --full 

Luego he añadido rspec-rails y guard-rspec como dependencias de desarrollo con

s.add_development_dependency "rspec-rails" 
s.add_development_dependency "guard-rspec" 

en mi archivo gemspec.

Cuando ejecuto tanto rspec como rake spec (con o sin bundle exec) mis especificaciones funcionan bien. Cuando ejecuto el comando guard, sin embargo, ejecuta todas las especificaciones por primera vez y luego no hace nada. No detectará ningún cambio de archivo en toda la aplicación.

El Guardfile se genera como de costumbre con guard init spec, aquí es su contenido

# A sample Guardfile 
# More info at https://github.com/guard/guard#readme 

guard 'rspec', :version => 2 do 
    watch(%r{^spec/.+_spec\.rb$}) 
    watch(%r{^lib/(.+)\.rb$})  { |m| "spec/lib/#{m[1]}_spec.rb" } 
    watch('spec/spec_helper.rb') { "spec/" } 

    # Rails example 
    watch(%r{^spec/.+_spec\.rb$}) 
    watch(%r{^app/(.+)\.rb$})       { |m| "spec/#{m[1]}_spec.rb" } 
    watch(%r{^lib/(.+)\.rb$})       { |m| "spec/lib/#{m[1]}_spec.rb" } 
    watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] } 
    watch(%r{^spec/support/(.+)\.rb$})     { "spec/" } 
    watch('spec/spec_helper.rb')      { "spec/" } 
    watch('config/routes.rb')       { "spec/routing" } 
    watch('app/controllers/application_controller.rb') { "spec/controllers" } 
    # Capybara request specs 
    watch(%r{^app/views/(.+)/.*\.(erb|haml)$})   { |m| "spec/requests/#{m[1]}_spec.rb" } 
end 

Si sigo una concha abierta con guardia de correr y lo hago de otra cáscara touch app/my_model.rb no pasa nada. Lo mismo para cada otro archivo (patrón) enumerado en el archivo Guardfile.

¿Hay alguna forma de solucionar este tipo de problemas?

actualización He creado un nuevo proyecto (unos raíles uno) e instalado la gema guard-shell con este Guardfile

guard 'shell' do 
    watch(%r{(.*)}) {|m| `cat #{m[0]}` } 
    watch(%r{(.*)}) {|m| raise m.to_s } 
end 

Incluso en este caso, si puedo editar los archivos no pasa nada. Estoy empezando a pensar que el problema podría estar en otro lugar, tal vez en la gema rb-fsevents. ¿Qué puedo verificar?

Respuesta

1

Ok, no sé qué pasa, pero el problema estaba en fseventd, que de alguna manera estaba congelado.

Ejecución de guardia sin ha resuelto el problema, por lo que el problema no era con el protector en sí

> guard 
Please install rb-fsevent gem for Mac OSX FSEvents support 
Using polling (Please help us to support your system better than that.) 
Please install growl or growl_notify gem for Mac OS X notification support and add it to your Gemfile 

Por otra parte un reinicio del sistema (no sé cómo reiniciar el demonio) tiene "desbloqueado" y la fseventd ahora funciona de nuevo Tal vez fue mi culpa porque no reinicié el sistema por más de un mes ...

10

El archivo de protección para rspec aparentemente no es del todo correcto. Está viendo app/controllers, pero no app/models.

que había necesidad de una regla como:

watch(%r{^app/models/(.+)\.rb$}) {|m| "spec/models/#{m[1]}_spec.rb" } 

Cambiar la segunda parte a donde se guardan sus modelos de especificaciones. Ha pasado un tiempo desde que usé rspec, no puedo recordar el diseño del directorio de especificaciones.

Editar:

también impar, el observador se define lib dos veces? Una vez en la parte superior y una vez debajo de los rieles. Me pregunto si esa segunda definición es un error, y pretende ser la regla para app/models.

+0

Tienes razón, actualizaré el archivo generado (predeterminado). Sin embargo, ese no es el problema. Ver mi edición a la pregunta. – Fabio

+0

ah veo ... puedes correr de guardia con un indicador de --debug, pero supongo que probablemente ya lo has intentado. – numbers1311407

+0

sí, lo intenté, gracias. Acabo de resolver con un reinicio del sistema, ver [mi respuesta] (http://stackoverflow.com/questions/7311405/guard-doesnt-see-file-updates/7312249#7312249). – Fabio

0

También parece haber un error en la versión actual 1.2.2, que mostró los mismos síntomas que describió en mi entorno. La actualización a 1.2.3 ayudó.

0

En mi caso, Guardia funciona inicialmente. Luego creé un enlace simbólico al directorio que mira. Se detuvo.

Supongamos que ve "fuente/ejemplo". Creé un enlace simbólico como "source/link_me" -> "source/example". Guardia también se mantendría en silencio.

Cuestiones relacionadas