【问题标题】:Strange error with rake db:migraterake db:migrate 的奇怪错误
【发布时间】:2014-07-31 04:46:43
【问题描述】:

我用谷歌搜索过,上面似乎什么都没有。

尝试为我的项目设置设计时发生此错误。 使用gem "devise" 将设计捆绑安装到我的Gemfile 中后,我运行rails g devise:install,然后运行rails g devise authorize。设计授权创建了一些数据库迁移,在迁移这些更改后,我得到了这个:

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

wrong number of arguments (2 for 1)/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/attribute_assignment.rb:14:in `assign_attributes'

我应该在最近的延迟工作(根据 Gemfile.lock 为 3.2.4)。如果问题确实存在于 attribute_assignment.rb 中并且我在本地修复它,那么当我将代码推送到生产环境时,它不会在那里中断吗?这是其他人以前见过的问题吗?是设计的问题,还是其他的问题?我该如何解决这个问题?

我什至不知道从哪里开始,但我已经尝试过捆绑更新,我在谷歌上搜索了这个错误一段时间,尝试不同的组合,采用类似的搜索主题和研究,我'我完全迷失了。我没有发现任何相关的东西。我不知道错误的真正来源或任何事情。我什至不确定我在寻找什么。

Rails 4.1.2

红宝石 2.0

Ubuntu 12.04 版本

全输出-

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
== 20140609160442 DeviseCreateAuthorizes: migrating ===========================
-- create_table(:authorizes)
   -> 0.1993s
-- add_index(:authorizes, :email, {:unique=>true})
   -> 0.0559s
-- add_index(:authorizes, :reset_password_token, {:unique=>true})
   -> 0.0561s
== 20140609160442 DeviseCreateAuthorizes: migrated (0.3121s) ==================

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

wrong number of arguments (2 for 1)/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/attribute_assignment.rb:14:in `assign_attributes'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/attr_encrypted-1.3.2/lib/attr_encrypted/adapters/active_record.rb:17:in `perform_attribute_assignment'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/attr_encrypted-1.3.2/lib/attr_encrypted/adapters/active_record.rb:24:in `assign_attributes_with_attr_encrypted'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/protected_attributes-1.0.7/lib/active_record/mass_assignment_security/core.rb:8:in `init_attributes'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/core.rb:198:in `initialize'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/inheritance.rb:30:in `new'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/inheritance.rb:30:in `new'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/protected_attributes-1.0.7/lib/active_record/mass_assignment_security/validations.rb:15:in `create!'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:1023:in `record_version_state_after_migrating'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:993:in `block in execute_migration_in_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:1038:in `block in ddl_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/connection_adapters/abstract/database_statements.rb:201:in `block in transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/connection_adapters/abstract/database_statements.rb:209:in `within_new_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/connection_adapters/abstract/database_statements.rb:201:in `transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/transactions.rb:208:in `transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:1038:in `ddl_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:991:in `execute_migration_in_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:953:in `block in migrate'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:949:in `each'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:949:in `migrate'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:807:in `up'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/migration.rb:785:in `migrate'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activerecord-4.1.2.rc1/lib/active_record/railties/databases.rake:34:in `block (2 levels) in <top (required)>'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/task.rb:240:in `call'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/task.rb:240:in `block in execute'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/task.rb:235:in `each'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/task.rb:235:in `execute'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
/home/josh/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/task.rb:172:in `invoke_with_call_chain'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/task.rb:165:in `invoke'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/application.rb:150:in `invoke_task'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/application.rb:106:in `each'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/application.rb:106:in `block in top_level'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/application.rb:115:in `run_with_threads'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/application.rb:100:in `top_level'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/application.rb:78:in `block in run'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/application.rb:176:in `standard_exception_handling'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/rake-10.3.2/lib/rake/application.rb:75:in `run'
/home/josh/TG/tax-guard-internal/bin/rake:8:in `<top (required)>'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:241:in `load'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:241:in `block in load'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:232:in `load_dependency'
/home/josh/.rvm/gems/ruby-2.0.0-p247@latest/gems/activesupport-4.1.2.rc1/lib/active_support/dependencies.rb:241:in `load'
/home/josh/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
/home/josh/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require'
-e:1:in `<main>'
Tasks: TOP => db:migrate

迁移-(这是自动的,我没有写,也不太了解。)

class DeviseCreateAuthorizes < ActiveRecord::Migration
  def change
    create_table(:authorizes) do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at


      t.timestamps
    end

    add_index :authorizes, :email,                unique: true
    add_index :authorizes, :reset_password_token, unique: true
    # add_index :authorizes, :confirmation_token,   unique: true
    # add_index :authorizes, :unlock_token,         unique: true
  end
end

Rails 4.1.0 也无法正常工作,错误如下-

** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
== 20140609160442 DeviseCreateAuthorizes: migrating ===========================
-- create_table(:authorizes)
   -> 0.2831s
-- add_index(:authorizes, :email, {:unique=>true})
   -> 0.0666s
-- add_index(:authorizes, :reset_password_token, {:unique=>true})
   -> 0.0559s
== 20140609160442 DeviseCreateAuthorizes: migrated (0.4060s) ==================

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

wrong number of arguments (2 for 1)/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/attribute_assignment.rb:14:in `assign_attributes'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/attr_encrypted-1.3.2/lib/attr_encrypted/adapters/active_record.rb:17:in `perform_attribute_assignment'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/attr_encrypted-1.3.2/lib/attr_encrypted/adapters/active_record.rb:24:in `assign_attributes_with_attr_encrypted'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/protected_attributes-1.0.7/lib/active_record/mass_assignment_security/core.rb:8:in `init_attributes'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/core.rb:198:in `initialize'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/inheritance.rb:30:in `new'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/inheritance.rb:30:in `new'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/protected_attributes-1.0.7/lib/active_record/mass_assignment_security/validations.rb:15:in `create!'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:1023:in `record_version_state_after_migrating'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:993:in `block in execute_migration_in_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:1038:in `block in ddl_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in `block in transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:219:in `within_new_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:211:in `transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/transactions.rb:208:in `transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:1038:in `ddl_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:991:in `execute_migration_in_transaction'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:953:in `block in migrate'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:949:in `each'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:949:in `migrate'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:807:in `up'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/migration.rb:785:in `migrate'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/activerecord-4.1.0/lib/active_record/railties/databases.rake:34:in `block (2 levels) in <top (required)>'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/task.rb:240:in `call'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/task.rb:240:in `block in execute'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/task.rb:235:in `each'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/task.rb:235:in `execute'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
/home/josh/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/task.rb:172:in `invoke_with_call_chain'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/task.rb:165:in `invoke'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/application.rb:150:in `invoke_task'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/application.rb:106:in `each'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/application.rb:106:in `block in top_level'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/application.rb:115:in `run_with_threads'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/application.rb:100:in `top_level'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/application.rb:78:in `block in run'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/application.rb:176:in `standard_exception_handling'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/lib/rake/application.rb:75:in `run'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/gems/rake-10.3.2/bin/rake:33:in `<top (required)>'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/bin/rake:23:in `load'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/bin/rake:23:in `<main>'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/bin/ruby_noexec_wrapper:14:in `eval'
/home/josh/.rvm/gems/ruby-2.0.0-p247@410/bin/ruby_noexec_wrapper:14:in `<main>'
Tasks: TOP => db:migrate

【问题讨论】:

  • 你能发布它失败的迁移文件吗?
  • 您正在使用4.1.2.rc1。尝试使用其他稳定版本,例如4.1.0。您可能遇到了错误。
  • @mkis- 已添加迁移。
  • @Crash 抱歉,我没有收到您的问题。澄清一下——您可以临时更改 Gemfile 中的 rails 版本以进行测试。

标签: ruby-on-rails ruby devise ruby-on-rails-4.1


【解决方案1】:

看起来您已经安装了 protected_attributes gem(在您的堆栈跟踪中提到了它)。您能否仔细检查这些迁移添加的新属性是否列在您的各种模型的“attr_accessible”语句中,然后尝试再次运行 rake db:migrate?

【讨论】:

    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 2017-03-01
    • 2018-02-05
    • 2014-07-16
    • 2013-09-03
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多