Ruby on rails Rspec-guard可以防止任何语法错误(使用spork)

Ruby on rails Rspec-guard可以防止任何语法错误(使用spork),ruby-on-rails,rspec,guard,spork,Ruby On Rails,Rspec,Guard,Spork,使用spork在guard内运行rspec--drb时出现问题: 在ruby文件(项目或规范文件)中出现任何语法错误后,运行rspec命令和跟踪更改看起来就像是警卫停止一样 当我在没有spork(也没有--drb)的情况下从guard运行rspec时,它工作得很好。 此外,spork+rspec工作正常,然后在没有防护装置的情况下运行 错误: 18:18:19 - INFO - Run all 18:18:20 - INFO - Running all specs Running tests w

使用spork在guard内运行rspec--drb时出现问题: 在ruby文件(项目或规范文件)中出现任何语法错误后,运行rspec命令和跟踪更改看起来就像是警卫停止一样

当我在没有spork(也没有--drb)的情况下从guard运行rspec时,它工作得很好。 此外,spork+rspec工作正常,然后在没有防护装置的情况下运行

错误:

18:18:19 - INFO - Run all
18:18:20 - INFO - Running all specs
Running tests with args ["--color", "--failure-exit-code", "2", "--format", "documentation", "--format", "Guard::RSpecFormatter", "--require", "spec_helper", "--require", "/home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec_formatter.rb", "spec"]...
Exception encountered: #<SyntaxError: /media/sf_win-sites/Intelinets/happiness/app/models/product.rb:3: syntax error, unexpected tIDENTIFIER, expecting keyword_end
  1validates :price , numericality: true #{greater_than: 0}
            ^>
backtrace:
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:247:in `require'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:247:in `block in require'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:232:in `load_dependency'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:247:in `require'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:348:in `require_or_load'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:480:in `load_missing_constant'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:180:in `const_missing'
/media/sf_win-sites/Intelinets/happiness/spec/models/product_spec.rb:2:in `<top (required)>'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:241:in `load'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:241:in `block in load'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:232:in `load_dependency'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/activesupport-4.1.9/lib/active_support/dependencies.rb:241:in `load'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `block in load_spec_files'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `each'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.0.4/lib/rspec/core/configuration.rb:1058:in `load_spec_files'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:97:in `setup'
/home/sphinx/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.0.4/lib/rspec/core/runner.rb:85:in `run'
/home/sphinx/.rvm/gems/ruby-2.1.5/bundler/gems/spork-224df492657e/lib/spork/test_framework/rspec.rb:12:in `run_tests'
/home/sphinx/.rvm/gems/ruby-2.1.5/bundler/gems/spork-224df492657e/lib/spork/run_strategy/forking.rb:13:in `block in run'
/home/sphinx/.rvm/gems/ruby-2.1.5/bundler/gems/spork-224df492657e/lib/spork/forker.rb:21:in `block in initialize'
/home/sphinx/.rvm/gems/ruby-2.1.5/bundler/gems/spork-224df492657e/lib/spork/forker.rb:18:in `fork'
/home/sphinx/.rvm/gems/ruby-2.1.5/bundler/gems/spork-224df492657e/lib/spork/forker.rb:18:in `initialize'
/home/sphinx/.rvm/gems/ruby-2.1.5/bundler/gems/spork-224df492657e/lib/spork/run_strategy/forking.rb:9:in `new'
/home/sphinx/.rvm/gems/ruby-2.1.5/bundler/gems/spork-224df492657e/lib/spork/run_strategy/forking.rb:9:in `run'
/home/sphinx/.rvm/gems/ruby-2.1.5/bundler/gems/spork-224df492657e/lib/spork/server.rb:49:in `run'
/home/sphinx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1588:in `perform_without_block'
/home/sphinx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1548:in `perform'
/home/sphinx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1626:in `block (2 levels) in main_loop'
/home/sphinx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1622:in `loop'
/home/sphinx/.rvm/rubies/ruby-2.1.5/lib/ruby/2.1.0/drb/drb.rb:1622:in `block in main_loop'
Done.

18:18:22 - ERROR - Guard::RSpec failed to achieve its <run_all>, exception was:
> [#ede981094807] Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/rspec_guard_result
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec/results.rb:11:in `readlines'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec/results.rb:11:in `initialize'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec/rspec_process.rb:46:in `new'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec/rspec_process.rb:46:in `_read_results'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec/rspec_process.rb:17:in `initialize'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec/runner.rb:68:in `new'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec/runner.rb:68:in `_really_run'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec/runner.rb:57:in `_run'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec/runner.rb:34:in `run_all'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec.rb:33:in `block in run_all'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec.rb:48:in `_throw_if_failed'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-rspec-4.6.4/lib/guard/rspec.rb:33:in `run_all'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:82:in `block in _supervise'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:79:in `catch'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:79:in `_supervise'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:22:in `block (3 levels) in run'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:119:in `block (2 levels) in _run_group_plugins'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:117:in `each'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:117:in `block in _run_group_plugins'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:116:in `catch'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:116:in `_run_group_plugins'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:21:in `block (2 levels) in run'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:20:in `each'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:20:in `block in run'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/lumberjack-1.0.10/lib/lumberjack.rb:32:in `unit_of_work'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/runner.rb:18:in `run'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/commander.rb:82:in `run_all'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/internals/queue.rb:42:in `block in _run_actions'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/internals/queue.rb:37:in `each'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/internals/queue.rb:37:in `_run_actions'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/internals/queue.rb:21:in `process'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/commander.rb:43:in `start'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/cli/environments/valid.rb:16:in `start_guard'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/cli.rb:122:in `start'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/thor-0.19.1/lib/thor/command.rb:27:in `run'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/thor-0.19.1/lib/thor.rb:359:in `dispatch'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/thor-0.19.1/lib/thor/base.rb:440:in `start'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/aruba_adapter.rb:32:in `execute'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/lib/guard/aruba_adapter.rb:19:in `execute!'
> [#ede981094807] /home/sphinx/.rvm/gems/ruby-2.1.5/gems/guard-2.13.0/bin/_guard-core:11:in `<main>'
18:18:22 - INFO - Guard::RSpec has just been fired
规格帮助器:

require 'rubygems'
require 'spork'


Spork.prefork do
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'rspec/autorun'
  require 'capybara/rails'
  require 'capybara/rspec'
  require "shoulda/matchers"

  ActiveRecord::Migration.maintain_test_schema!
  Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

end

Spork.each_run do
end

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_spec_type_from_file_location!

end
警卫文件:

guard :rspec, :cmd => "rspec --drb" do
  require "guard/rspec/dsl"
  dsl = Guard::RSpec::Dsl.new(self)

  # Feel free to open issues for suggestions and improvements

  # RSpec files
  rspec = dsl.rspec
  watch(rspec.spec_helper) { rspec.spec_dir }
  watch(rspec.spec_support) { rspec.spec_dir }
  watch(rspec.spec_files)

  # Ruby files
  ruby = dsl.ruby
  dsl.watch_spec_files_for(ruby.lib_files)

  # Rails files
  rails = dsl.rails(view_extensions: %w(erb haml slim))
  dsl.watch_spec_files_for(rails.app_files)
  dsl.watch_spec_files_for(rails.views)

  watch(rails.controllers) do |m|
    [
      rspec.spec.("routing/#{m[1]}_routing"),
      rspec.spec.("controllers/#{m[1]}_controller"),
      rspec.spec.("acceptance/#{m[1]}")
    ]
  end

  # Rails config changes
  watch(rails.spec_helper)     { rspec.spec_dir }
  watch(rails.routes)          { "#{rspec.spec_dir}/routing" }
  watch(rails.app_controller)  { "#{rspec.spec_dir}/controllers" }

  # Capybara features specs
  watch(rails.view_dirs)     { |m| rspec.spec.("features/#{m[1]}") }
  watch(rails.layouts)       { |m| rspec.spec.("features/#{m[1]}") }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
    Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
  end
end

guard :spork, :rspec_env => { 'RAILS_ENV' => 'test' }, test_unit: false do
  watch('config/application.rb')
  watch('config/environment.rb')
  watch('config/environments/test.rb')
  watch(%r{^config/initializers/.+\.rb$})
  watch('Gemfile.lock')
  watch('spec/spec_helper.rb') { :rspec }
  # watch('test/test_helper.rb') { :test_unit }
  # watch(%r{features/support/}) { :cucumber }
end
.rspec:

--color
--require spec_helper
--format documentation

就个人而言,我建议从spork切换到or

但这与这里的问题无关

首先,最好在guard rspec的GitHub页面上打开问题。(您可能会得到更快的响应,并且可以跟踪何时正式发布修复程序)

问题就在这里:

18:18:22 - ERROR - Guard::RSpec failed to achieve its <run_all>, exception was:
> [#ede981094807] Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/rspec_guard_result
18:18:22-错误-Guard::RSpec未能实现其目标,异常为:
>[#ede981094807]Errno::enoint:没有这样的文件或目录@rb_sysopen-tmp/rspec_guard_result
由于某种原因,
guard rspec
无法打开其结果文件

我猜这是因为当您使用
--drb
运行rspec时,故障不会报告给Guard rspec(通过
Guard::RSpecFormatter
类)

所以我不确定rspec--drb是否可以在这里工作。您可以尝试更新版本的RSpec,看看它是否有帮助

如果你能建立一个小型回购,重现问题,并在中打开一个问题,我可以看看

18:18:22 - ERROR - Guard::RSpec failed to achieve its <run_all>, exception was:
> [#ede981094807] Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/rspec_guard_result