Ruby on rails 3.1 Heroku上的参数错误

Ruby on rails 3.1 Heroku上的参数错误,ruby-on-rails-3.1,authlogic,usersession,Ruby On Rails 3.1,Authlogic,Usersession,我正在使用Rails 3.1和Authlogic 3.0.3。我在Heroku上部署了我的应用程序。在本地,一切都运行得很好,但是,当我部署到Heroku时,会出现以下错误: ArgumentError (wrong number of arguments (3 for 2)): app/controllers/application_controller.rb:38:in `current_user_session' app/controllers/application_contro

我正在使用Rails 3.1和Authlogic 3.0.3。我在Heroku上部署了我的应用程序。在本地,一切都运行得很好,但是,当我部署到Heroku时,会出现以下错误:

ArgumentError (wrong number of arguments (3 for 2)):
  app/controllers/application_controller.rb:38:in `current_user_session'
  app/controllers/application_controller.rb:43:in `current_user'
  app/controllers/application_controller.rb:5:in `block in <class:ApplicationController>'
ArgumentError(错误的参数数(3代表2)):
app/controllers/application\u controller.rb:38:在“当前用户会话”中
app/controllers/application\u controller.rb:43:在“当前用户”中
app/controllers/application\u controller.rb:5:in'block in'
使用fuller stacktrace:

vendor/plugins/rpm/lib/new_relic/agent/instrumentation/rails3/active_record_instrumentation.rb:16:in `log_with_newrelic_instrumentation'
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/postgresql_adapter.rb:550:in `exec_query'
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/postgresql_adapter.rb:679:in `table_exists?'
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active_record/attribute_methods/primary_key.rb:41:in `get_primary_key'
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active_record/attribute_methods/primary_key.rb:25:in `reset_primary_key'
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active_record/attribute_methods/primary_key.rb:16:in `primary_key'
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/session.rb:48:in `session_credentials'
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/session.rb:33:in `persist_by_session'
.bundle/gems/ruby/1.9.1/gems/activesupport-3.1.0/lib/active_support/callbacks.rb:413:in `_run_persist_callbacks'
.bundle/gems/ruby/1.9.1/gems/activesupport-3.1.0/lib/active_support/callbacks.rb:81:in `run_callbacks'
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/callbacks.rb:90:in `persist'
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/persistence.rb:55:in `persisting?'
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/persistence.rb:39:in `find'
app/controllers/application_controller.rb:38:in `current_user_session'
app/controllers/application_controller.rb:43:in `current_user'
app/controllers/application_controller.rb:5:in `block in <class:ApplicationController>'
vendor/plugins/rpm/lib/new_relic/agent/instrumentation/rails3/active_record_instrumentation.rb:16:in`logu_with_newrelic_instrumentation'
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active\u record/connection\u adapters/postgresql\u adapter.rb:550:in'exec\u query'
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active\u-record/connection\u-adapters/postgresql\u-adapter.rb:679:在'table\u-exists'中
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active\u record/attribute\u methods/primary\u key.rb:41:in'get\u primary\u key'
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active\u-record/attribute\u-methods/primary\u-key.rb:25:in“reset\u primary\u-key”
.bundle/gems/ruby/1.9.1/gems/activerecord-3.1.0/lib/active\u record/attribute\u methods/primary\u key.rb:16:in'primary\u key'
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/session.rb:48:in'session_credentials'
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/session.rb:33:in'persist_by_session'
.bundle/gems/ruby/1.9.1/gems/activesupport-3.1.0/lib/active\u support/callbacks.rb:413:在“运行/持久化\u回调”中
.bundle/gems/ruby/1.9.1/gems/activesupport-3.1.0/lib/active\u support/callbacks.rb:81:in'run\u callbacks'
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/callbacks.rb:90:in'persist'
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/persistence.rb:55:在“持久化”中
.bundle/gems/ruby/1.9.1/gems/authlogic-3.0.3/lib/authlogic/session/persistence.rb:39:in'find'
app/controllers/application\u controller.rb:38:在“当前用户会话”中
app/controllers/application\u controller.rb:43:在“当前用户”中
app/controllers/application\u controller.rb:5:in'block in'
我有Authlogic设置,如示例中所示,因为我需要简单的身份验证。这是我的ApplicationController中的代码:

class ApplicationController < ActionController::Base
  protect_from_forgery
  layout 'application'
  before_filter { |c| Authorization.current_user = current_user } #this is line 5

  helper_method :current_user, :current_user_session

# erroneous stuff removed

  private 
  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find #line 43
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.user #line 38
  end
end
class ApplicationController
和我的用户会话:

class UserSession < Authlogic::Session::Base
  find_by_login_method :find_by_anything
end
class UserSession
它调用用户中的方法:

class User < ActiveRecord::Base
  attr_accessible :email, :password, :remember_me

  acts_as_authentic do |c|
    c.login_field = 'name'
    c.require_password_confirmation = false
    c.validates_format_of_login_field_options = {:with => /^[a-zA-Z0-9]+$/, :message => "should use only letters and numbers, no other characters."} 
    c.validates_length_of_login_field_options = {:within => 5..25}
  end

  def self.find_by_anything(login)
    # Postgres and SQLite use a case sensitive search, so we need to make it case insensitive
    find_by_smart_case_login_field(login) || find_by_email(login)
  end
class用户/^[a-zA-Z0-9]+$/,:message=>“应仅使用字母和数字,不使用其他字符。”}
c、 验证登录字段选项的长度
终止
定义self.find_by_anything(登录)
#Postgres和SQLite使用区分大小写的搜索,因此我们需要使其不区分大小写
通过智能案例登录字段查找(登录)|通过电子邮件查找(登录)
终止
我的猜测是UserSession.find是罪魁祸首,但我一生都无法解决这个问题。我已经试了两天了,但是日志并没有什么帮助,而且我似乎无法浏览源代码。这两种环境之间唯一的区别是我在本地使用MySQL,heroku使用Postgres


编辑:问题不是Authlogic,而是NewRelic。碰巧错误会冒出来,并通过Authlogic变得明显——请参阅解决方案的答案。

结果表明,ArgumentError是由NewRelic插件引起的。如果您遇到此问题,请转到命令行并键入:

heroku addons:remove newrelic:standard --app your_app_name