Заставить spork работать с Ruby 1.9.2 / 3 + Rails 3.1 + Rspec? - PullRequest
0 голосов
/ 07 ноября 2011

Существует довольно много хороших учебников, и у меня не было особых проблем с тем, чтобы это работало в прошлом.Но после нескольких часов попыток я, должно быть, что-то упустил.

Я выполнил стандартные инструкции по установке и запустил сервер spork:

Using RSpec
Preloading Rails environment
Loading Spork.prefork block...
Spork is ready and listening on 8989!

Хорошо выглядит.

Затем я перехожу на новую вкладку изапустите мои спецификации:

$ rspec spec

Эта команда ничего не возвращает после выполнения только в течение доли секунды.Поэтому я возвращаюсь на сервер spork, чтобы посмотреть, что произошло, и получаю:

Using RSpec
Preloading Rails environment
Loading Spork.prefork block...
Spork is ready and listening on 8989!
Running tests with args ["--color", "spec"]...
Exception encountered: #<DRb::DRbConnError: druby://localhost:56736 - #<Errno::ECONNREFUSED: Connection refused - connect(2)>>
backtrace:
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:736:in `rescue in block in open'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:730:in `block in open'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:729:in `each'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:729:in `open'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1191:in `initialize'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1171:in `new'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1171:in `open'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1087:in `block in method_missing'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1105:in `with_friend'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1086:in `method_missing'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1074:in `respond_to?'
/Users/briancody/.rvm/gems/ruby-1.9.3-p0@scholastica/gems/spork-0.9.0.rc9/lib/spork/run_strategy/forking.rb:10:in `block in run'
/Users/briancody/.rvm/gems/ruby-1.9.3-p0@scholastica/gems/spork-0.9.0.rc9/lib/spork/forker.rb:21:in `block in initialize'
/Users/briancody/.rvm/gems/ruby-1.9.3-p0@scholastica/gems/spork-0.9.0.rc9/lib/spork/forker.rb:18:in `fork'
/Users/briancody/.rvm/gems/ruby-1.9.3-p0@scholastica/gems/spork-0.9.0.rc9/lib/spork/forker.rb:18:in `initialize'
/Users/briancody/.rvm/gems/ruby-1.9.3-p0@scholastica/gems/spork-0.9.0.rc9/lib/spork/run_strategy/forking.rb:9:in `new'
/Users/briancody/.rvm/gems/ruby-1.9.3-p0@scholastica/gems/spork-0.9.0.rc9/lib/spork/run_strategy/forking.rb:9:in `run'
/Users/briancody/.rvm/gems/ruby-1.9.3-p0@scholastica/gems/spork-0.9.0.rc9/lib/spork/server.rb:48:in `run'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1548:in `perform_without_block'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1508:in `perform'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1586:in `block (2 levels) in main_loop'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1582:in `loop'
/Users/briancody/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/drb/drb.rb:1582:in `block in main_loop'
Done.

По какой-то причине drb не удается подключиться?Я гуглил как сумасшедший, но там, кажется, ничего полезного нет.

Некоторые возможные подсказки

  • Порт (в этомcase 56736) меняется каждый раз, когда я пытаюсь запустить пакет
  • Я получаю одинаковый результат как на ruby ​​1.9.2, так и на ruby ​​1.9.3
  • Я использую mac (snowLeopard) и брандмауэры отключены
  • Я пробовал это на совершенно другом Mac (также Snow Leopard) с тем же результатом.
  • Я использую последнюю версию Cucumber, rspec,и spork.
  • Я также настроил огуречный spork, и он так же не справился.

Как вы видите, я какое-то время стучал по нему.Мой проект использует много драгоценных камней, и отсутствие спорка делает тестирование действительно ужасным.Пожалуйста, помогите ...

ОБНОВЛЕНИЕ

Вот мой spec_helper:

require 'spork'

Spork.prefork do
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require "email_spec"
  require 'webmock/rspec'
  require 'vcr'
  require 'database_cleaner'

  include Devise::TestHelpers
  include EmailSpec::Helpers
  include EmailSpec::Matchers

  # Stub all updates to search indexes
  class Profile
    def update_tank_indexes ; end
    def delete_tank_indexes ; end
  end
  class Journal
    def update_tank_indexes ; end
  end

  # Apparently rspec doesn't understand <tt>main_app</tt> so stub it out.
  def main_app ; self ; end


  # Requires supporting ruby files with custom matchers and macros, etc,
  # in spec/support/ and its subdirectories.
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|

    config.mock_with :rspec

    # If you're not using ActiveRecord, or you'd prefer not to run each of your
    # examples within a transaction, remove the following line or assign false
    # instead of true.
    config.use_transactional_fixtures = true
    config.extend VCR::RSpec::Macros

    # Always clean the database after running describe/context blocks to ensure a
    # consistent state. This is especially important when using the <tt>rspec-set</tt>
    # method. This method creates setup object once -- and only once -- proir to
    # running an entire describe/context block. In this way, it's similar to using
    # <tt>before(:all)</tt> except that <tt>set</tt> is better because:
    #
    #   * It automatically reloads the object before each example, making it much
    #     safer than before(:all) which can cause bugs if you're not careful.
    #   * It's lazily evaluated.
    #
    # You can read more at:
    #
    #   * eggsonbread.com/2010/05/25/speed-up-your-specs-with-set/
    #   * github.com/pcreux/rspec-set
    #
    # Note: This is not part of default configuration. Be sure to retain this snippet
    # when upgrading.
    #
    DatabaseCleaner.strategy = :truncation
    config.before(:all) do
      DatabaseCleaner.clean
    end
    config.after(:suite) do
      DatabaseCleaner.clean
    end
  end

end

Spork.each_run do
  # This code will be run each time you run your specs.
end

Ответы [ 2 ]

3 голосов
/ 19 ноября 2011

Я открыл тикет на этот выпуск, но ничего не вышло за последние 3,5 месяца: https://github.com/sporkrb/spork/issues/133

Обновление: Я нашел решение и сообщил все в этот тикет. tl; dr: измените вашу запись Gemfile на 'Always_validate_ssl_certifitcates', чтобы включить :require => false.

1 голос
/ 07 ноября 2011

Можете ли вы откатиться до spork 0.8.5 и посмотреть, работает ли он?Я только что подтвердил, что работает.

...