Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 诡计和独角兽的奇怪错误_Ruby On Rails_Ruby_Devise_Unicorn - Fatal编程技术网

Ruby on rails 诡计和独角兽的奇怪错误

Ruby on rails 诡计和独角兽的奇怪错误,ruby-on-rails,ruby,devise,unicorn,Ruby On Rails,Ruby,Devise,Unicorn,我在我的许多rails应用程序中使用了Desive 在开发过程中,我每天都会遇到1-2次这样的错误 NoMethodError: undefined method `users_url' for #<RegistrationsController:0x007f14cd6cd958> .0/gems/turbolinks-2.5.3/lib/turbolinks/ xhr_headers.rb: 21:in `_compute_redirect_to

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

NoMethodError: undefined method `users_url' for #<RegistrationsController:0x007f14cd6cd958>

          .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'
,唯一的解决办法是

 sudo service unicorn_myapp stop 
然后再从

 sudo service unicorn_myapp start 
我检查了我的用户模型和相关模型的回调,但一切都很好,正如我前面所说的,重新启动unicorn后注册工作非常好

我正在使用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'
她是我的朋友

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
我的注册控制器.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

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

actionpack-4.1.5/lib/action\u dispatch/routing/polymorphic\u 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

看起来,你的
资源
对象变成了,要么是集合,要么是
用户。新建
,然后它变成了
:复数
,并给你带来了错误。我的猜测是试着在这个方向上调试,HTH

你能给我们看看你的
路线吗?关于你的
用户
?你有
用户的url
路线吗?有吗你定制了你的
注册控制器
?你能给我们看看吗?事实上,问题每天都发生在凌晨2点05分,一整天我至少有200个新注册,没有问题。但是你没有回答我的问题;)嗯,查看日志,考虑到凌晨2点05分,这似乎是
机架缓存
的缓存失效问题。你是如何配置的?你能发布rake routes的输出吗?但是为什么问题每天都发生在同一个时间,我从Desive中删除了omniautable,并使用omniauth facebook gem实现了facebook auth,昨天我(facebook)身份验证失败!无授权代码:OmniAuth::Strategies::Facebook::NoAuthorizationCodeError,必须在unicorn.log中传递
代码
(通过URL或
fbsr\u XXX
签名请求cookie)
…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'
# -- 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