3

Я использую рельсы в Docker с Spring и Guard. См Guardfile:`const_get ': uninitialized constant [class] (NameError)` после сохранения файла в Docker с весной

guard 'rspec', cmd: "#{env_vars} spring rspec -color -f doc", :all_on_start => false, :all_after_pass => false do watch(%r{^spec/.+_spec\.rb$}) 

Weird проблема: когда spring метка находится на месте в команде выше, я получаю сообщение об ошибке при запуске функции, но только после того, как я сохранил файл в контейнере, в некотором роде. Это ошибка:

/usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:268:in `const_get': uninitialized constant User (NameError) 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:268:in `block in constantize' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `each' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `inject' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/inflector/methods.rb:266:in `constantize' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:583:in `get' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:614:in `constantize' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise.rb:301:in `get' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise/mapping.rb:81:in `to' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise/mapping.rb:76:in `modules' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise/mapping.rb:93:in `routes' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise/mapping.rb:160:in `default_used_route' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise/mapping.rb:70:in `initialize' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise.rb:331:in `new' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise.rb:331:in `add_mapping' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise/rails/routes.rb:241:in `block in devise_for' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise/rails/routes.rb:240:in `each' 
    from /usr/local/bundle/gems/devise-4.2.0/lib/devise/rails/routes.rb:240:in `devise_for' 
    from /usr/src/app/config/routes.rb:34:in `block in <top (required)>' 
    from /usr/local/bundle/gems/actionpack-5.0.1/lib/action_dispatch/routing/route_set.rb:389:in `instance_exec' 
    from /usr/local/bundle/gems/actionpack-5.0.1/lib/action_dispatch/routing/route_set.rb:389:in `eval_block' 
    from /usr/local/bundle/gems/actionpack-5.0.1/lib/action_dispatch/routing/route_set.rb:371:in `draw' 
    from /usr/src/app/config/routes.rb:1:in `<top (required)>' 
    from /usr/local/bundle/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `load' 
    from /usr/local/bundle/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `block in load_paths' 
    from /usr/local/bundle/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `each' 
    from /usr/local/bundle/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:40:in `load_paths' 
    from /usr/local/bundle/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:16:in `reload!' 
    from /usr/local/bundle/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:26:in `block in updater' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/file_update_checker.rb:77:in `call' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/file_update_checker.rb:77:in `execute' 
    from /usr/local/bundle/gems/railties-5.0.1/lib/rails/application/routes_reloader.rb:7:in `execute' 
    from /usr/local/bundle/gems/railties-5.0.1/lib/rails/application/finisher.rb:132:in `block (2 levels) in <module:Finisher>' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:396:in `instance_exec' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:396:in `block in make_lambda' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:169:in `call' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:169:in `block (2 levels) in halting' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:547:in `call' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:547:in `block (2 levels) in default_terminator' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:546:in `catch' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:546:in `block in default_terminator' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:170:in `call' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:170:in `block in halting' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:454:in `call' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:454:in `block in call' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:454:in `each' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:454:in `call' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:101:in `__run_callbacks__' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:750:in `_run_run_callbacks' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:90:in `run_callbacks' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/execution_wrapper.rb:108:in `run!' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/reloader.rb:113:in `run!' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/reloader.rb:48:in `block (2 levels) in reload!' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/reloader.rb:46:in `tap' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/reloader.rb:46:in `block in reload!' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/execution_wrapper.rb:85:in `wrap' 
    from /usr/local/bundle/gems/activesupport-5.0.1/lib/active_support/reloader.rb:45:in `reload!' 
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:154:in `serve' 
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:131:in `block in run' 
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:125:in `loop' 
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application.rb:125:in `run' 
    from /usr/local/bundle/gems/spring-1.7.2/lib/spring/application/boot.rb:19:in `<top (required)>' 
    from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
    from /usr/local/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
    from -e:1:in `<main>' 
19:33:45 - ERROR - Failed: "BYEBUG=true spring rspec -color -f doc -r /usr/local/bundle/gems/guard-rspec-4.7.3/lib/guard/rspec_formatter.rb -f Guard::RSpecFormatter --failure-exit-code 2 spec/controllers/api/buyside/ideas_controller_spec.rb" (exit code: 1) 

Если я запускаю спецификации в свежем контейнере, эта ошибка не происходит, пока я не сохранить файл в COPY г кода. После сохранения любого файла я получаю сообщение об ошибке при попытке запуска спецификаций.

Если я запустил команду охраны без тега spring, я также не получу ошибку, но, конечно, у меня больше нет преимущества предварительной загрузки пружины, поэтому спецификации очень медленные.

Любая идея, что происходит? Не было этой проблемы до недавнего обновления до Rails 5. С удовольствием отправляю другую соответствующую информацию.

Заранее спасибо.

+0

Я вижу точно такую ​​же ошибку. Я бы добавил, что я могу сохранить/изменить/коснуться ** spec ** файлов, не вызывая следующий прогон 'spring rspec' сбой, но - как вы определили - сохранение/изменение/касание любого ** фактического файла кода ** (например, класс модели) прерывает следующий запуск 'spring'. –

ответ

0

Этот вопрос обсуждается здесь: rails/spring#519

Обходной, как и намекал в этом вопросе, чтобы отключить жадную загрузку.

В config/environments/test.rb вы меняете;

config.eager_load = true 

в

config.eager_load = false 
Смежные вопросы