Задать вопрос
svetozar
@svetozar
dudin.tv

Почему rspec дублирует вызов routes.rb?

В остальном приложение нормально работает, а проблема появилась с появлением Capybara. Но теперь убирание капибары не помогает. Ошибка остается(

Сейчас при вызове rspec происходит явная двойная попытка исполнить routes.rb:

$ bundle exec rspec
--- here ---
--- here ---
/Users/svetozar/.rvm/gems/ruby-2.1.2@railstutorial_rails_4_0/gems/actionpack-4.2.4/lib/action_dispatch/routing/route_set.rb:557:in `add_route': Invalid route name, already in use: 'root'  (ArgumentError)
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: 
http://guides..org/routing.html#restricting-the-routes-created
	from /Users/svetozar/.rvm/gems/ruby-2.1.2@railstutorial_rails_4_0/gems/actionpack-4.2.4/lib/action_dispatch/routing/mapper.rb:1561:in `add_route'
	from /Users/svetozar/.rvm/gems/ruby-2.1.2@railstutorial_rails_4_0/gems/actionpack-4.2.4/lib/action_dispatch/routing/mapper.rb:1536:in `decomposed_match'
	from /Users/svetozar/.rvm/gems/ruby-2.1.2@railstutorial_rails_4_0/gems/actionpack-4.2.4/lib/action_dispatch/routing/mapper.rb:1517:in `block in match'
	from /Users/svetozar/.rvm/gems/ruby-2.1.2@railstutorial_rails_4_0/gems/actionpack-4.2.4/lib/action_dispatch/routing/mapper.rb:1507:in `each'
	from /Users/svetozar/.rvm/gems/ruby-2.1.2@railstutorial_rails_4_0/gems/actionpack-4.2.4/lib/action_dispatch/routing/mapper.rb:1507:in `match'
и т.д. ...


"--- here ---" это я сам специально печатаю в routes.rb чтобы отследить двойной вызов:
require 'sidekiq/web'

Rails.application.routes.draw do
	puts "--- here ---"
	### ГЛАВНОЕ
	root 'service#home'
	# ...


Роут может быть вообще один root, но он все равно вызовется два раза и консоль откашляется... Попытки найти в интернете ответ ни к чему не привели, хотя проблема встречается часто.

Запуск rails s -e test не вызывает ошибок. Также, вызов тех же версий Capybara и Rspec на соседнем тестовом проекте не вызывает ошибок...

Мой Gemfile:

source 'http://rubygems.org'

gem 'rails', '4.2.4'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'

gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0',          group: :doc

gem 'bcrypt-ruby', '~> 3.1', '>= 3.1.5'

gem 'tzinfo-data', platforms: [:mingw, :mswin]

gem 'haml'
gem 'bootstrap-sass'

gem 'devise'
gem 'cancancan'
gem 'rolify'

gem 'russian'
gem 'ancestry'
gem 'paperclip' #, : 'thoughtbot/paperclip'
gem 'activerecord-session_store' #, : 'rails/activerecord-session_store'

gem 'will_paginate', '~> 3.1'

# поиск
gem 'sunspot_rails'
gem 'date_diff'

# фоновые задачи
gem 'redis-namespace'
gem 'sidekiq', '~> 4.1'
gem 'sidekiq-status'
gem 'sidekiq_mailer'
gem 'sinatra', require: false

group :production do
	gem 'mysql2', '~> 0.3.20'
	gem 'therubyracer', platform: :ruby 
	gem 'execjs'
end

group :development do
  gem 'capistrano-rails'
  gem 'capistrano-rvm'
  gem 'capistrano-passenger'
  gem 'capistrano-bundler'
  gem 'capistrano-sidekiq'
  gem 'progress_bar'
  gem 'better_errors'
  gem 'binding_of_caller'
end

group :development, :test do
  gem 'sunspot_solr'
  gem 'puma'
end

group :test do
  gem 'rspec-rails', '~> 3.4', '>= 3.4.2'
  gem 'factory_girl_rails', '~> 4.5'
  gem 'capybara', '~> 2.5'
end


Версии гемов:
capybara (2.7.0)
factory_girl (4.7.0)
factory_girl_rails (4.7.0)
rspec-core (3.4.4)
rspec-expectations (3.4.0)
rspec-mocks (3.4.1)
rspec-rails (3.4.2)
rspec-support (3.4.1)

update:
Попробовал установить vagrant-виртуалку чтобы попробовать с нуля поставить гемы — все работает без проблем...

update2:
На виртуальном linux'е попробовал — просто rspec работает, а вот bundle exec rspec снова выдает эту же ошибку...
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
railsfun
@railsfun
Web Developer
Проверьте, может где-то прописано

Rails.application.reload_routes!

это перезагружает роуты во время работы приложения. Хотя даже так, если у вас дублей нет в роутах - не должно ругаться...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы