ruby on rails - ¿Es imposible usar Guardia con RubyMine?
ruby-on-rails rspec (4)
Cuando ejecutas guardias con RubyMine para realizar pruebas, es extremadamente útil configurar un entorno de base de datos separado para la especificación de guardia, de lo contrario experimentarás problemas extraños (un proceso u otro se congela o da resultados inconsistentes).
Asigne un nombre al entorno de especificaciones de guardia "ci" y cree una entrada adicional en database.yml. Uso "ci" para Automatización Continua.
Luego pon esto en tu archivo Guardfile. La clave es
''RAILS_ENV'' => ''ci''
Así es como tengo la configuración de la mina:
group :spec do
guard :spork, :rspec_port => 1234, :cucumber_env => { ''RAILS_ENV'' => ''ci'' }, :rspec_env => { ''RAILS_ENV'' => ''ci'' } do
watch(''config/application.rb'')
watch(''config/environment.rb'')
watch(%r{^config/environments/.+.rb$})
watch(%r{^config/initializers/.+.rb$})
watch(''spec/spec_helper.rb'')
watch(%r{app/models/.+/.rb})
watch(%r{app/views/.+/.haml})
watch(''Gemfile'')
watch(''Gemfile.lock'')
watch(''test/test_helper.rb'')
end
# environment is ''ci''
guard :rspec, :cli => ''--drb --drb-port 1234'', :version => 2, :all_after_pass => false, :notification => true, :environment => ''ci'' 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$}) do |m|
["spec/routing/#{m[1]}_routing_spec.rb",
"spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb",
"spec/acceptance/#{m[1]}_spec.rb",
"spec/requests/#{m[1]}_spec.rb"]
end
watch(%r{^spec/support/(.+).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
end
Entonces corro
bundle exec guard -g spec
Tampoco me molesta que RubyMine guarde los archivos automáticamente cada 60 segundos, incluso si eso pone en marcha a Guard, ya que mi nueva Retina MBP no se ralentiza notablemente cuando ejecuto Guard.
Por cierto, las especificaciones de ejecución de Guard son realmente geniales, ya que encontrarás pruebas que fallan mucho más rápido que tratar de realizar las pruebas tú mismo en RubyMine. Es decir, la prueba básicamente está lista para el momento en que mi dedo se suelta de los cmd-s para guardar.
Lo ejecuto desde la terminal. No he intentado correr con RubyMine. ¿Alguien quiere comentar sobre las ventajas de hacer eso? Supongo que tener el volcado de pila clicable sería agradable.
Por alguna razón inexplicable, RubyMine guarda automáticamente cada cambio que realices, por lo que cada golpe de tecla activará Guard para ejecutar tus pruebas. Y lo más ridículo es que aparentemente no hay forma de desactivar esta "característica" de autoguardado. Me pregunto, RubyMine parece ser un editor muy popular entre los desarrolladores de Rails y Guard parece ser una herramienta indispensable para automatizar las pruebas. Debido a que Guard es imposible de usar razonablemente con RubyMine, ¿cómo lidian las personas con la automatización de sus pruebas con RubyMine?
Este es un problema realmente frustrante, y hace que sea muy difícil usar RubyMine con guardia o gruñido u otros corredores de tareas.
Creé una solución loca, pero está funcionando lo suficientemente bien para mí:
- Agregue una herramienta externa para ejecutar el venerable comando "táctil" de Unix, que actualiza la marca de tiempo modificada de un archivo, generando así un evento de sistema de archivos. Debe tener un aspecto como este:
- Asigne a la herramienta externa un atajo de teclado.
- Asigne un atajo de teclado al comando Guardar documento.
- Grabe una macro que ejecuta Guardar documento, luego la herramienta externa "tocar". Debe utilizar los atajos de teclado que asignó porque Guardar documento no aparece en los menús de la aplicación.
- Asigna Cmd-S como un atajo de teclado para tu nueva macro.
La publicación completa de mi blog sobre esto está en http://singlebrook.com/blog/saving-files-in-rubymine
Estoy usando RubyMine con Guardia todo el día, y de hecho, algunas partes de Guard se han desarrollado en RubyMine.
Puede configurar el comportamiento de RubyMine > Preferences
yendo a RubyMine > Preferences
en el menú e ingrese la sync
en el cuadro de búsqueda, luego seleccione System Settings
del System Settings
en la lista.
La imagen muestra mi configuración y funciona bien. Es posible que también desee deshabilitar la opción Save files on frame deactivation
, solo para guardar un archivo en un guardado manual.
Prefiero usar Guardia desde la terminal, pero puede configurar RubyMine para ejecutar Guard directamente agregando una configuración de Run > Edit configurations
seleccionando Run > Edit configurations
en el menú:
Ahora puede agregar una nueva configuración haciendo clic en el signo más +
y seleccionar la IRB console
:
Ahora nombre la configuración Guard
, ingrese la ruta de acceso a la secuencia de comandos IRB y configure el directorio de trabajo del proyecto. Es posible que desee ingresar sus argumentos de Guard como argumentos IRB, como diferentes grupos de Guardia, etc.
Encontré mi camino a Guardia abriendo la terminal, cambié al directorio de trabajo del proyecto e /Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard
which guard
, lo que da como resultado /Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard
para mi Ruby 1.9 .3-p194 SDK gestionado por RVM.
A continuación, debe verificar la ejecución del script en el contexto del paquete en la pestaña Bundler
.
Ahora presiona OK
y tienes una nueva configuración de ejecución. Antes de iniciar Guard, debe configurar el interactor en simple agregando
interactor :simple
a tu Guardfile
Ahora puede ejecutar (o incluso eliminar errores) Guard directamente en RubyMine:
¡Disfrutar!
O puede agregar un archivo run_guard.rb en la raíz de su proyecto con el siguiente código:
exec ''guard''
¡Cuidado! Rubymine tiene un problema con tu RUTA. Por ejemplo, / usr / local / bin se filtra ...