设计和独角兽的奇怪错误

我在开发过程中使用了许多我的rails应用程序,我每天都会遇到这些错误1-2次

NoMethodError: undefined method `users_url' for # .0/gems/turbolinks-2.5.3/lib/turbolinks/ xhr_headers.rb: 21:in `_compute_redirect_to_location' …0224210521/app/controllers/ /home/remmon/apps/myapp/releases/20150224210521/app/controllers/registrations_controller.rb registrations_controller.rb: 26:in `create' …le/ruby/2.1.0/gems/journey-1.0.4/lib/journey/ router.rb: 68:in `block in call' …le/ruby/2.1.0/gems/journey-1.0.4/lib/journey/ router.rb: 56:in `each' …le/ruby/2.1.0/gems/journey-1.0.4/lib/journey/ router.rb: 56:in `call' …uby/2.1.0/gems/omniauth-1.2.2/lib/omniauth/ strategy.rb: 186:in `call!' …uby/2.1.0/gems/omniauth-1.2.2/lib/omniauth/ strategy.rb: 164:in `call' …ems/rack-mobile-detect-0.4.0/lib/rack/ mobile-detect.rb: 164:in `call' …dle/ruby/2.1.0/gems/warden-1.2.3/lib/warden/ manager.rb: 35:in `block in call' …dle/ruby/2.1.0/gems/warden-1.2.3/lib/warden/ manager.rb: 34:in `catch' …dle/ruby/2.1.0/gems/warden-1.2.3/lib/warden/ manager.rb: 34:in `call' …red/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ etag.rb: 23:in `call' …/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ conditionalget.rb: 35:in `call' …/2.1.0/gems/rack-1.4.5/lib/rack/session/abstract/ id.rb: 210:in `context' …/2.1.0/gems/rack-1.4.5/lib/rack/session/abstract/ id.rb: 205:in `call' …bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ sendfile.rb: 102:in `call' …/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ methodoverride.rb: 21:in `call' …/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ runtime.rb: 17:in `call' …red/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ lock.rb: 15:in `call' …by/2.1.0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 136:in `forward' …by0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 143:in `pass' …by/2.1.0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 155:in `invalidate' …by/2.1.0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 71:in `call!' …by/2.1.0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 51:in `call' …undle/ruby/2.1.0/gems/rack-cors-0.3.1/lib/rack/ cors.rb: 72:in `call' …by/2.1.0/gems/unicorn-4.8.3/lib/unicorn/ http_server.rb: 576:in `process_client' 

在unicorn.log中我发现了这些错误

 (facebook) Callback phase initiated. (facebook) Callback phase initiated. (facebook) Callback phase initiated. (facebook) Callback phase initiated. (facebook) Callback phase initiated. (facebook) Callback phase initiated. 

,唯一的解决方案是

  sudo service unicorn_myapp stop 

然后再次启动它

  sudo service unicorn_myapp start 

我检查了我的用户模型和相关模型的回调,但一切都运行正常,重新启动独角兽之后注册工作非常好,正如我之前所说的

我使用的是ruby 2.1.5和rails 3.2.21

这里也是我的gem文件

 source 'https://rubygems.org' gem 'rails', '3.2.21' # Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git' gem 'twilio-ruby', '~> 3.12' gem 'omniauth-facebook' gem 'pg' gem 'thumbs_up' gem "lol_dba" gem "paperclip", "~> 3.5.1" gem 'acts-as-taggable-on' gem 'acts_as_list' gem 'mobile-fu', '~> 1.3.1' gem 'time_difference' gem 'mongo_mapper' gem 'bson_ext', "1.10.0" # Gems used only for assets and not required # in production environments by default. gem 'humanizer' gem 'birthday', '~> 0.3.0' gem "embedly" gem 'jquery-fileupload-rails' gem "aws-sdk" gem 'zodiac' #gem "searchkick" gem "geocoder" gem "strong_parameters" gem 'redis-rails' gem 'whenever', :require => false gem "wysiwyg-rails" gem "select2-rails" gem 'mime-types', :require => 'mime/types' #gem 'asset_sync' ,:git=>"git://github.com/rumblelabs/asset_sync.git" group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' gem 'turbo-sprockets-rails3' # See https://github.com/sstephenson/execjs#readme for more supported runtimes # gem 'therubyracer', :platforms => :ruby gem 'uglifier', '>= 1.0.3' end group :development do gem 'thin' gem 'better_errors',"1.1.0" gem 'binding_of_caller' gem 'meta_request' gem 'rack-mini-profiler' end gem 'ransack' # gem 'rack-mini-profiler' #gem 'mailboxer',:git=>"git://github.com/remon/mailboxer" gem "mailboxer" gem 'turbolinks' gem 'jquery-rails','2.1.4' gem 'jquery-ui-rails','3.0.1' #gem 'activeadmin', github: 'gregbell/active_admin', branch: '0-6-stable' gem "devise" gem 'cache_digests' # To use ActiveModel has_secure_password # gem 'bcrypt-ruby', '~> 3.0.0' # To use Jbuilder templates for JSON # gem 'jbuilder' # Use unicorn as the app server # gem 'unicorn' # Deploy with Capistrano # gem 'capistrano' gem 'jquery-datatables-rails', '~> 2.2.1' #gem "pjax_rails" gem 'dalli' gem 'simple_form' gem "cocoon" gem "squeel" gem "kaminari" ,"0.14.1" gem "jbuilder",'0.9.1' # Use unicorn as the app server # Deploy with Capistrano group :production do gem 'unicorn' end #gem 'exception_notification' gem 'newrelic_rpm' gem 'rack-cors', :require => 'rack/cors' #gem 'sidekiq',"2.17.7" #gem "sidekiq", "3.3.0" #gem 'capistrano-sidekiq', group: :development gem 'daemons' gem 'delayed_job_active_record' gem 'sinatra', require: false gem 'slim' #gem 'capistrano-sidekiq', github: 'seuros/capistrano-sidekiq' gem 'capistrano' ,"2.13.5" #gem 'jquery-turbolinks'# # To use debugger # gem 'debugger' 

她是我的路线.rb

 myApp::Application.routes.draw do namespace :api, defaults: { format: "json" } do devise_scope :user do post 'users' => 'registrations#create', :as => 'user_registration' post 'users/sign_in' => 'sessions#create', :as => 'user_session' get '/users/sign_out' => 'sessions#destroy' end devise_for :users, :controllers => {:sessions=>"sessions", :registrations => "registrations", :passwords => "passwords" ,:omniauth_callbacks=>"omniauth_callbacks"} ##etc... end 

我的注册controller.rb

 class RegistrationsController < Devise::RegistrationsController before_filter :prepare_for_mobile respond_to :js ,:html def create build_resource(sign_up_params) #resource.skip_confirmation! resource_saved = resource.save yield resource if block_given? if resource_saved if resource.active_for_authentication? set_flash_message :notice, :signed_up if is_flashing_format? sign_up(resource_name, resource) respond_with resource, location: after_sign_up_path_for(resource) else set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format? expire_data_after_sign_in! respond_with resource, location: after_inactive_sign_up_path_for(resource) end else clean_up_passwords resource @validatable = devise_mapping.validatable? if @validatable @minimum_password_length = resource_class.password_length.min end respond_with resource end end def update self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key) prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email) resource_updated = update_resource(resource, account_update_params) yield resource if block_given? if resource_updated if is_flashing_format? flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ? :update_needs_confirmation : :updated set_flash_message :notice, flash_key end sign_in resource_name, resource, bypass: true respond_with resource, location: after_update_path_for(resource) else clean_up_passwords resource respond_with resource end end protected def after_sign_up_path_for(resource) step2_path end end 

还有我的rails跟踪错误

 …2.21/lib/action_dispatch/routing/ /home/remoncpo/apps/optlar/shared/bundle/ruby/2.1.0/gems/actionpack-3.2.21/lib/action_dispatch/routing/polymorphic_routes.rb polymorphic_routes.rb: 129:in `polymorphic_url' …tionpack-3.2.21/lib/action_dispatch/routing/ url_for.rb: 150:in `url_for' …pack-3.2.21/lib/action_controller/metal/ redirecting.rb: 105:in `_compute_redirect_to_location' …pack-3.2.21/lib/action_controller/metal/ redirecting.rb: 74:in `redirect_to' …actionpack-3.2.21/lib/action_controller/metal/ flash.rb: 25:in `redirect_to' …-3.2.21/lib/action_controller/metal/ instrumentation.rb: 60:in `block in redirect_to' …tivesupport-3.2.21/lib/active_support/ notifications.rb: 123:in `block in instrument' ….2.21/lib/active_support/notifications/ instrumenter.rb: 20:in `instrument' …tivesupport-3.2.21/lib/active_support/ notifications.rb: 123:in `instrument' …-3.2.21/lib/action_controller/metal/ instrumentation.rb: 59:in `redirect_to' …onpack-3.2.21/lib/action_controller/metal/ responder.rb: 135:in `redirect_to' …onpack-3.2.21/lib/action_controller/metal/ responder.rb: 193:in `navigation_behavior' …onpack-3.2.21/lib/action_controller/metal/ responder.rb: 162:in `rescue in to_html' …onpack-3.2.21/lib/action_controller/metal/ responder.rb: 160:in `to_html' …onpack-3.2.21/lib/action_controller/metal/ responder.rb: 153:in `respond' …onpack-3.2.21/lib/action_controller/metal/ responder.rb: 146:in `call' …ck-3.2.21/lib/action_controller/metal/ mime_responds.rb: 239:in `respond_with' …0228155747/app/controllers/ registrations_controller.rb: 26:in `create' …-3.2.21/lib/action_controller/metal/ implicit_render.rb: 4:in `send_action' …gems/actionpack-3.2.21/lib/abstract_controller/ base.rb: 167:in `process_action' …onpack-3.2.21/lib/action_controller/metal/ rendering.rb: 10:in `process_action' …actionpack-3.2.21/lib/abstract_controller/ callbacks.rb: 18:in `block in process_action' …s/activesupport-3.2.21/lib/active_support/ callbacks.rb: 458:in `_run__2151305456332142610__process_action__86349116187657263__callbacks' …s/activesupport-3.2.21/lib/active_support/ callbacks.rb: 405:in `__run_callback' …s/activesupport-3.2.21/lib/active_support/ callbacks.rb: 385:in `_run_process_action_callbacks' …s/activesupport-3.2.21/lib/active_support/ callbacks.rb: 81:in `run_callbacks' …actionpack-3.2.21/lib/abstract_controller/ callbacks.rb: 17:in `process_action' …ctionpack-3.2.21/lib/action_controller/metal/ rescue.rb: 29:in `process_action' …-3.2.21/lib/action_controller/metal/ instrumentation.rb: 30:in `block in process_action' …tivesupport-3.2.21/lib/active_support/ notifications.rb: 123:in `block in instrument' ….2.21/lib/active_support/notifications/ instrumenter.rb: 20:in `instrument' …tivesupport-3.2.21/lib/active_support/ notifications.rb: 123:in `instrument' …-3.2.21/lib/action_controller/metal/ instrumentation.rb: 29:in `process_action' …k-3.2.21/lib/action_controller/metal/ params_wrapper.rb: 207:in `process_action' ….2.21/lib/active_record/railties/ controller_runtime.rb: 18:in `process_action' …gems/actionpack-3.2.21/lib/abstract_controller/ base.rb: 121:in `process' …actionpack-3.2.21/lib/abstract_controller/ rendering.rb: 45:in `process' …/gems/actionpack-3.2.21/lib/action_controller/ metal.rb: 203:in `dispatch' …-3.2.21/lib/action_controller/metal/ rack_delegation.rb: 14:in `dispatch' …/gems/actionpack-3.2.21/lib/action_controller/ metal.rb: 246:in `block in action' …onpack-3.2.21/lib/action_dispatch/routing/ route_set.rb: 73:in `call' …onpack-3.2.21/lib/action_dispatch/routing/ route_set.rb: 73:in `dispatch' …onpack-3.2.21/lib/action_dispatch/routing/ route_set.rb: 36:in `call' …ctionpack-3.2.21/lib/action_dispatch/routing/ mapper.rb: 43:in `call' …le/ruby/2.1.0/gems/journey-1.0.4/lib/journey/ router.rb: 68:in `block in call' …le/ruby/2.1.0/gems/journey-1.0.4/lib/journey/ router.rb: 56:in `each' …le/ruby/2.1.0/gems/journey-1.0.4/lib/journey/ router.rb: 56:in `call' …onpack-3.2.21/lib/action_dispatch/routing/ route_set.rb: 608:in `call' …uby/2.1.0/gems/omniauth-1.2.2/lib/omniauth/ strategy.rb: 186:in `call!' …uby/2.1.0/gems/omniauth-1.2.2/lib/omniauth/ strategy.rb: 164:in `call' …ems/rack-mobile-detect-0.4.0/lib/rack/ mobile-detect.rb: 164:in `call' …dle/ruby/2.1.0/gems/warden-1.2.3/lib/warden/ manager.rb: 35:in `block in call' …dle/ruby/2.1.0/gems/warden-1.2.3/lib/warden/ manager.rb: 34:in `catch' …dle/ruby/2.1.0/gems/warden-1.2.3/lib/warden/ manager.rb: 34:in `call' …b/action_dispatch/middleware/ best_standards_support.rb: 17:in `call' …red/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ etag.rb: 23:in `call' …/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ conditionalget.rb: 35:in `call' …tionpack-3.2.21/lib/action_dispatch/middleware/ head.rb: 14:in `call' …3.2.21/lib/action_dispatch/middleware/ params_parser.rb: 21:in `call' …ionpack-3.2.21/lib/action_dispatch/middleware/ flash.rb: 242:in `call' …/2.1.0/gems/rack-1.4.5/lib/rack/session/abstract/ id.rb: 210:in `context' …/2.1.0/gems/rack-1.4.5/lib/rack/session/abstract/ id.rb: 205:in `call' …npack-3.2.21/lib/action_dispatch/middleware/ cookies.rb: 341:in `call' …s/activerecord-3.2.21/lib/active_record/ query_cache.rb: 64:in `call' …record/connection_adapters/abstract/ connection_pool.rb: 479:in `call' …ack-3.2.21/lib/action_dispatch/middleware/ callbacks.rb: 28:in `block in call' …s/activesupport-3.2.21/lib/active_support/ callbacks.rb: 405:in `_run__2996406385371488609__call__2187759682541233929__callbacks' …s/activesupport-3.2.21/lib/active_support/ callbacks.rb: 405:in `__run_callback' …s/activesupport-3.2.21/lib/active_support/ callbacks.rb: 385:in `_run_call_callbacks' …s/activesupport-3.2.21/lib/active_support/ callbacks.rb: 81:in `run_callbacks' …ack-3.2.21/lib/action_dispatch/middleware/ callbacks.rb: 27:in `call' …bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ sendfile.rb: 102:in `call' ….21/lib/action_dispatch/middleware/ debug_exceptions.rb: 16:in `call' …2.21/lib/action_dispatch/middleware/ show_exceptions.rb: 56:in `call' …by/2.1.0/gems/railties-3.2.21/lib/rails/rack/ logger.rb: 32:in `call_app' …by/2.1.0/gems/railties-3.2.21/lib/rails/rack/ logger.rb: 16:in `block in call' …ivesupport-3.2.21/lib/active_support/ tagged_logging.rb: 22:in `tagged' …by/2.1.0/gems/railties-3.2.21/lib/rails/rack/ logger.rb: 16:in `call' …ck-3.2.21/lib/action_dispatch/middleware/ request_id.rb: 22:in `call' …/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ methodoverride.rb: 21:in `call' …/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ runtime.rb: 17:in `call' ….2.21/lib/active_support/cache/strategy/ local_cache.rb: 72:in `call' …red/bundle/ruby/2.1.0/gems/rack-1.4.5/lib/rack/ lock.rb: 15:in `call' …by/2.1.0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 136:in `forward' …by/2.1.0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 143:in `pass' …by/2.1.0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 155:in `invalidate' …by/2.1.0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 71:in `call!' …by/2.1.0/gems/rack-cache-1.2/lib/rack/cache/ context.rb: 51:in `call' …undle/ruby/2.1.0/gems/rack-cors-0.3.1/lib/rack/ cors.rb: 72:in `call' …le/ruby/2.1.0/gems/railties-3.2.21/lib/rails/ engine.rb: 484:in `call' …by/2.1.0/gems/railties-3.2.21/lib/rails/ application.rb: 231:in `call' …gems/railties-3.2.21/lib/rails/railtie/ configurable.rb: 30:in `method_missing' …by/2.1.0/gems/unicorn-4.8.3/lib/unicorn/ http_server.rb: 576:in `process_client' …by/2.1.0/gems/unicorn-4.8.3/lib/unicorn/ http_server.rb: 670:in `worker_loop' 

我不确定错误究竟是什么,但是通过查看gem源代码, def polymorphic_url方法,

actionpack-4.1.5/lib/action_dispatch/routing/polymorphic_routes.rb

 # -- some code inflection = if options[:action] && options[:action].to_s == "new" args.pop :singular elsif (record.respond_to?(:persisted?) && !record.persisted?) args.pop :plural elsif record.is_a?(Class) args.pop :plural else :singular end 

看起来,你的resource对象变成了集合或User.new ,然后变成:plural并给你那个错误。 我的猜测是尝试调试那个方向,HTH