Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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
Mysql 添加“U索引迁移失败,带有”;“参数超出范围”;_Mysql_Ruby On Rails_Rake - Fatal编程技术网

Mysql 添加“U索引迁移失败,带有”;“参数超出范围”;

Mysql 添加“U索引迁移失败,带有”;“参数超出范围”;,mysql,ruby-on-rails,rake,Mysql,Ruby On Rails,Rake,我正在尝试在另一台计算机上复制一个(工作!)Rails 3/MySql应用程序。我创建了schema.rb和data.yml,然后使用了db:schema:load和db:data:load,除了一件事之外,所有这些都工作得很好。我的表上有很多索引,rake无法创建它们——我不得不将它们注释出schema.rb以使其生成,所以我尝试将它们放入迁移(在原始应用程序中创建它们的方式!),rake仍然死掉。以下是错误消息: O:\Development\myapp>rake db:migrate

我正在尝试在另一台计算机上复制一个(工作!)Rails 3/MySql应用程序。我创建了schema.rb和data.yml,然后使用了db:schema:load和db:data:load,除了一件事之外,所有这些都工作得很好。我的表上有很多索引,rake无法创建它们——我不得不将它们注释出schema.rb以使其生成,所以我尝试将它们放入迁移(在原始应用程序中创建它们的方式!),rake仍然死掉。以下是错误消息:

O:\Development\myapp>rake db:migrate
rake aborted!
An error has occurred, all later migrations canceled:

argument out of range

C:/Ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6-x86-mingw32/lib/active_record/connection_adapters/mysql2_adapter.rb:446:in `utc'
C:/Ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6-x86-mingw32/lib/active_record/connection_adapters/mysql2_adapter.rb:446:in `each'
C:/Ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6-x86-mingw32/lib/active_record/connection_adapters/mysql2_adapter.rb:446:in `indexes'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:406:in `index_name_exists?'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:343:in `add_index'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:383:in `block in method_missing'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:359:in `block in say_with_time'
C:/Ruby/lib/ruby/1.9.1/benchmark.rb:294:in `measure'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:359:in `say_with_time'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:379:in `method_missing'O:/Development/codenotes/db/migrate/20110114212538_add_notes_index.rb:11:in `up'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:312:in `block in migrate'
C:/Ruby/lib/ruby/1.9.1/benchmark.rb:294:in `measure'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:312:in `migrate'
C:in `migrate'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:537:in `block (2 levels) in migrate'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:613:in `call'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:613:in `ddl_transaction'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:536:in `block in migrate'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:523:in `each'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:523:in `migrate'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:433:in `up'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:415:in `migrate'
C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/railties/databases.rake:142:in `block (2 levels) in <top (required)>'
C:/Ruby/lib/ruby/1.9.1/rake.rb:634:in `call'
C:/Ruby/lib/ruby/1.9.1/rake.rb:634:in `block in execute'
C:/Ruby/lib/ruby/1.9.1/rake.rb:629:in `each'
C:/Ruby/lib/ruby/1.9.1/rake.rb:629:in `execute'
C:/Ruby/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain'
C:/Ruby/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
C:/Ruby/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain'
C:/Ruby/lib/ruby/1.9.1/rake.rb:581:in `invoke'
C:/Ruby/lib/ruby/1.9.1/rake.rb:2041:in `invoke_task'
C:/Ruby/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level'
C:/Ruby/lib/ruby/1.9.1/rake.rb:2019:in `each'
C:/Ruby/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level'
C:/Ruby/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
C:/Ruby/lib/ruby/1.9.1/rake.rb:2013:in `top_level'
C:/Ruby/lib/ruby/1.9.1/rake.rb:1992:in `run'
C:/Ruby/bin/rake:31:in `<main>'
O:\Development\myapp>rakedb:migrate
雷克流产了!
发生错误,所有后续迁移均已取消:
参数超出范围
C:/Ruby/lib/Ruby/gems/1.9.1/gems/mysql2-0.2.6-x86-mingw32/lib/active\u record/connection\u adapters/mysql2\u adapter.rb:446:in`utc'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/mysql2-0.2.6-x86-mingw32/lib/active\u record/connection\u adapters/mysql2\u adapter.rb:446:in'each'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/mysql2-0.2.6-x86-mingw32/lib/active\u record/connection\u adapters/mysql2\u adapter.rb:446:in`indexes'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/connection\u adapters/abstract/schema\u语句。rb:406:in'index\u name\u exists'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/connection\u adapters/abstract/schema\u语句。rb:343:in'add\u index'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:383:in'block in method\u missing'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:359:in'block in say\u with_time'
C:/Ruby/lib/Ruby/1.9.1/benchmark.rb:294:in'measure'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:359:in'say\u with_time'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:379:in'method\u missing'O:/Development/codenotes/db/migrate/20110114212538\u add\u notes\u index.rb:11:in'up'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:312:in'block in migrate'
C:/Ruby/lib/Ruby/1.9.1/benchmark.rb:294:in'measure'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:312:in'migrate'
C:在“迁移”中
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:537:migrate中的block(2层)中
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:613:in'call'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:613:in'ddl\u transaction'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:536:in'block in migrate'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:523:in'each'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:523:in'migrate'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/migration.rb:433:in'up'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/migration.rb:415:in'migrate'
C:/Ruby/lib/Ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active\u record/railties/databases.rake:142:in'block(2层)in'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:634:in'call'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:634:in'block in execute'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:629:in'each'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:629:in'execute'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:595:in`block in invoke_with_call_chain'
C:/Ruby/lib/Ruby/1.9.1/monitor.rb:201:in'mon_synchronize'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:588:in'invoke_with_call_chain'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:581:in'invoke'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:2041:in'invoke_task'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:2019:in'block(2层)in top_level'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:2019:in'each'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:2019:在“顶层块”中
C:/Ruby/lib/Ruby/1.9.1/rake.rb:2058:in'standard_exception_handling'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:2013:in'top_level'
C:/Ruby/lib/Ruby/1.9.1/rake.rb:1992:in'run'
C:/Ruby/bin/rake:31:in`'
以下是令人不快的迁移:

class AddNotesIndex < ActiveRecord::Migration
  def self.up
        add_index :users, :email,                :unique => true
        add_index :users, :reset_password_token, :unique => true
        add_index :users, :confirmation_token,   :unique => true
        add_index :users, :unlock_token,         :unique => true
  end

  def self.down
        remove_index :users, :email,                :unique => true
        remove_index :users, :reset_password_token, :unique => true
        remove_index :users, :confirmation_token,   :unique => true
        remove_index :users, :unlock_token,         :unique => true
  end
end
class AddNotesIndextrue
添加索引:users,:reset\u password\u token,:unique=>true
添加索引:users,:confirmation\u token,:unique=>true
添加索引:users,:unlock\u token,:unique=>true
结束
def自动关闭
删除索引:users,:email,:unique=>true
删除索引:users,:reset\u password\u token,:unique=>true
删除索引:users,:confirmation\u token,:unique=>true
删除索引:users,:unlock\u token,:unique=>true
结束
结束
这与我在原始应用程序中创建索引时使用的代码完全相同。据我所知,我在这台计算机上运行的是完全相同的环境——Ruby 1.9.2、Rails 3.0.3、mysql2 0.2.6 x86-mingw32、MySQL 5.1.41。我甚至复制了同一个libmysql.dll。我被难住了

编辑


哈哈,我真傻。我正在更新MySQL\MySQL服务器5.1\bin中的libmysql.dll,但没有更新Ruby\bin中的libmysql.dll。一旦我将最新版本复制到Ruby\bin中,一切正常。谢谢大家

似乎很多人都有这个问题,包括我在内。该错误似乎源于mysql2 gem。因此,对我起作用的是:

  • 安装mysql-gem
  • 在Gemfile中从mysql2更改为mysql
  • 在database.yml中将适配器从mysql2更改为mysql
  • 如果创建的最后一个表是在调用add_index的同一迁移过程中创建的,那么可能会删除它,因为它将再次尝试创建它

    也许这是一种解决方案,但我还没有找到更好的方法。

    你能打开数据库控制台(
    rails DB
    )并运行
    SHOW key FROM users
    ?输出是什么?