Ho un'app in esecuzione su Rails 4/Ruby 2. Il frontend è in fase di sviluppo con Ember.Errore di dipendenza circolare in Rails 4 durante le specifiche richieste Rspec
Quando si esegue rake spec
, viene visualizzata l'eccezione seguente. Sembra che accada solo nelle specifiche di Rspec (non in modalità dev). Inoltre, di solito accade solo se eseguo solo le specifiche di una caratteristica; se eseguo l'intera suite di test, di solito non ottengo l'errore.
L'errore si verifica a causa di questo si impegnano a Rails: https://github.com/rails/rails/commit/b33700f5580b4cd85379a1dc60fa341ac4d8deb2
Ma, naturalmente, non so se questo è il vero problema o se si tratta di qualcosa di più profondo nello stack di chiamate. So che se faccio un minimo cambiamento nel codice Rails per non generare quell'errore, tutto sembra funzionare bene e i miei test passano. Ma qualcosa, da qualche parte, sembra provare a caricare LocationsController anche se è già caricato.
Qualsiasi aiuto è molto apprezzato, in quanto questo mi ha davvero sconcertato.
1) Locations Creating locations
Failure/Error: Unable to find matching line from backtrace
RuntimeError:
Circular dependency detected while autoloading constant LocationsController
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/dependencies.rb:460:in `load_missing_constant'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/dependencies.rb:183:in `const_missing'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/inflector/methods.rb:226:in `const_get'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/inflector/methods.rb:226:in `block in constantize'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/inflector/methods.rb:224:in `each'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/inflector/methods.rb:224:in `inject'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/inflector/methods.rb:224:in `constantize'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/dependencies.rb:534:in `get'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/dependencies.rb:565:in `constantize'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/routing/route_set.rb:76:in `controller_reference'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/routing/route_set.rb:66:in `controller'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/routing/route_set.rb:44:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/journey/router.rb:71:in `block in call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/journey/router.rb:59:in `each'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/journey/router.rb:59:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/routing/route_set.rb:655:in `call'
# /usr/local/rvm/gems/[email protected]/gems/request_store-1.0.5/lib/request_store/middleware.rb:9:in `call'
# /usr/local/rvm/gems/[email protected]/gems/warden-1.2.1/lib/warden/manager.rb:35:in `block in call'
# /usr/local/rvm/gems/[email protected]/gems/warden-1.2.1/lib/warden/manager.rb:34:in `catch'
# /usr/local/rvm/gems/[email protected]/gems/warden-1.2.1/lib/warden/manager.rb:34:in `call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/etag.rb:23:in `call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/conditionalget.rb:25:in `call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/head.rb:11:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/params_parser.rb:27:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/flash.rb:241:in `call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/session/abstract/id.rb:225:in `context'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/session/abstract/id.rb:220:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/cookies.rb:486:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activerecord/lib/active_record/query_cache.rb:36:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/callbacks.rb:373:in `_run__1828229838678430325__call__callbacks'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/callbacks.rb:80:in `run_callbacks'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/callbacks.rb:27:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/railties/lib/rails/rack/logger.rb:38:in `call_app'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/railties/lib/rails/rack/logger.rb:21:in `block in call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/tagged_logging.rb:67:in `block in tagged'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/tagged_logging.rb:25:in `tagged'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/tagged_logging.rb:67:in `tagged'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/railties/lib/rails/rack/logger.rb:21:in `call'
# /usr/local/rvm/gems/[email protected]/gems/quiet_assets-1.0.2/lib/quiet_assets.rb:18:in `call_with_quiet_assets'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/request_id.rb:21:in `call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/methodoverride.rb:21:in `call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/runtime.rb:17:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/activesupport/lib/active_support/cache/strategy/local_cache.rb:83:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/actionpack/lib/action_dispatch/middleware/static.rb:64:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/railties/lib/rails/engine.rb:511:in `call'
# /usr/local/rvm/gems/[email protected]/bundler/gems/rails-783c6711a4b4/railties/lib/rails/application.rb:97:in `call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/builder.rb:138:in `call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/urlmap.rb:65:in `block in call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/urlmap.rb:50:in `each'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/urlmap.rb:50:in `call'
# /usr/local/rvm/gems/[email protected]/gems/capybara-2.1.0/lib/capybara/server.rb:19:in `call'
# /usr/local/rvm/gems/[email protected]/gems/rack-1.5.2/lib/rack/handler/webrick.rb:60:in `service'
# /usr/local/rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
# /usr/local/rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
# /usr/local/rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'
routes.rb:
get '/locations', to: 'main#index', :as => :em_locations
scope 'api' do
resources :locations, only: [:index]
end
Gems rilevanti:
* capybara (2.1.0)
* rspec (2.13.0)
* rspec-core (2.13.1)
* rspec-expectations (2.13.0)
* rspec-mocks (2.13.1)
* rspec-rails (2.13.2)
* ember-data-source (0.0.5)
* ember-rails (0.12.0)
* ember-source (1.0.0.rc3.3)
* active_model_serializers (0.8.1)
che cosa ho provato:
- Cambiare i nomi ei percorsi dei miei percorsi, pensando le braciole/posizioni potrebbero essere in conflitto.
- Modificato un numero di diverse opzioni di Rails che ho ritenuto rilevanti. In realtà, se config.cache_classes viene impostato su false nel file env test.rb, risolve il problema anche se il costo di far funzionare le specifiche circa 5 volte più lentamente.
Ecco le specifiche sto correndo:
require 'spec_helper'
feature 'Locations', js: true, strategy: :truncation, slow: true do
before do
login_for_request
Factory.create(:warehouse, code: "TW", name: 'TEST WAREHOUSE')
end
scenario "Creating locations" do
visit em_locations_path
click_link "create-locations"
select 'TEST WAREHOUSE', from: "warehouse"
select "GLD", from: "section"
fill_in "row-start", with: "AA"
fill_in "row-end", with: "AB"
fill_in "bay-start", with: "1"
fill_in "bay-end", with: "2"
fill_in "tier-start", with: "1"
fill_in "tier-end", with: "2"
fill_in "subbay-start", with: "1"
fill_in "subbay-end", with: "2"
click_button "Create"
end
end
Grazie mille per questa domanda e risposta. Ho avuto lo stesso problema con le specifiche dei controller namespaced e questa soluzione di 'require_relative' -ing il file del controller ha funzionato per me. –
Nessun problema, felice che ti abbia aiutato. – kstevens715
Funziona anche per me. Mi chiedo davvero quale sia l'accordo con questo problema! –