用RubyMine不能使用Guard?

由于某些莫名其妙的原因,RubyMine会自动保存您所做的每一个更改,因此每个关键笔划都会触发Guard来运行您的testing! 而最荒谬的是,显然没有办法禁用这个自动保存“function”。 我只是想知道,RubyMine似乎是Rails开发人员中非常stream行的编辑器,而Guard似乎是用于自动化testing的不可或缺的工具。 由于Guard不可能与RubyMine合理使用,所以人们如何处理用RubyMine自动化testing?

我整天使用RubyMine和Guard,实际上,一些Guard的部分是在RubyMine中开发的。

您可以通过转到菜单中的RubyMine > Preferences来configuration自动安全行为,并在search框中inputsync ,然后从列表中selectSystem Settings

配置RubyMine自动安全行为

图片显示我的设置,这些工作正常。 您也可以在禁用Save files on frame deactivation禁用Save files on frame deactivation ,只保存手动保存的文件。

我更喜欢从terminal使用Guard,但是您可以configurationRubyMine直接运行Guard,方法是从菜单中selectRun > Edit configurations ,添加Runconfiguration

现在,您可以通过单击加号+并selectIRB console来添加新的configuration:

添加新的运行配置

现在命名configurationGuard ,将Guard的pathinputIRB脚本并设置项目工作目录。 您可能希望将Guard参数input为IRB参数,如不同的Guard组等。

配置运行配置

我通过打开terminal,find了我的pathGuard,改成了项目工作目录,并进入which guard ,导致/Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard为我的Ruby 1.9 .3-p194 SDK由RVMpipe理。

接下来,您需要检查Bundler选项卡中Bundle上下文中的运行脚本

使用bundle exec运行

现在按OK ,你有一个全新的运行configuration。 在启动Guard之前,您应该通过添加将交互器configuration为简单

 interactor :simple 

到你的Guardfile 。 现在,您可以直接在RubyMine中运行(甚至debugging)Guard:

警卫在行动

请享用!

当你使用RubyMine来进行testing时,为守护规范configuration一个单独的数据库环境是非常有用的,否则你会遇到奇怪的问题(一个进程或另一个进程冻结或者给出不一致的结果。

命名你的守卫规范环境“ci”,并在database.yml中创build一个额外的条目。 我使用“ci”进行连续自动化。

然后把它放在你的Guardfile中。 关键是

 'RAILS_ENV' => 'ci' 

以下是我的设置:

 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 

然后我跑

 bundle exec guard -g spec 

我也不介意每隔60秒自动保存一次RubyMine文件,即使启动了Guard,因为我的一个新的MBP Retina在运行Guard时速度并不明显。

顺便说一下,Guard运行规范真的很棒,因为你会发现比在RubyMine中运行testing要快得多的失败testing。 也就是说,testing基本上是由我的手指从cmd-s释放的时间来完成的。

我从terminal运行这个。 我还没有试过用RubyMine运行。 有人想评论这样做的好处吗? 我想有堆栈转储点击会很好。

这是一个非常令人沮丧的问题,并且使用RubyMine和Guardian或其他任务运行者很难。

我创build了一个疯狂的解决方法,但它对我来说已经足够好了:

  1. 添加一个外部工具来运行古老的Unix“touch”命令,它更新文件的修改时间戳,从而生成一个文件系统事件。 它应该是这样的: 外部工具称为触摸
  2. 为外部工具分配一个键盘快捷键。
  3. 指定保存文档命令的键盘快捷键。
  4. logging运行保存文档的macros,然后点击“外部工具”。 您需要使用您分配的键盘快捷键,因为保存文档不会出现在应用程序的菜单中。
  5. 将Cmd-S指定为新macros的键盘快捷键。

我关于这个完整的博客文章是在http://singlebrook.com/blog/saving-files-in-rubymine

或者,您可以使用以下代码在项目的根目录添加一个run_guard.rb文件:

 exec 'guard' 

小心! 卢西丁有一个问题,你的path。 例如,/ usr / local / bin被过滤…

Interesting Posts