【问题标题】:How to add_index in mysql2+rails 3?如何在 mysql2+rails 3 中添加索引?
【发布时间】:2011-05-25 08:36:55
【问题描述】:

如何在mysql2中添加索引?

带线: 执行“更改表 urli_development.slugs ADD INDEX slugs_sluggable_id(sluggable_id)” 一切正常。

with line: add_index :slugs, :sluggable_id 我得到这个“无效日期”错误。

问题是我必须添加以下行: add_index(:slugs, [:name, :sluggable_type, :sequence, :scope], :unique => true, :name => 'index_slugs_on_n_s_s_and_s')

上面的行不起作用。

我使用 Rails 3 和 mysql2,但在尝试迁移数据库时出现“无效日期”错误。

你是怎么做到的?

【问题讨论】:

    标签: ruby-on-rails-3 mysql2


    【解决方案1】:

    我也遇到过这个问题,坦率地说,我还没有找到完整的“为什么”。但我确实想分享一些我刚刚发现的东西。

    尝试通过排除“id”字段来创建表...... add_index 将立即运行。所以

    class CreateSlugs < ActiverRecord::Migration   
        def self.up
          create_table :slugs,:id=>false do |t|             
             t.string "name"
             t.timestamps
           end
           add_index :indexes,"name",:name=>"slugs_name",:unique=>true
           add_column :slugs,:id,:primary_key
        end
    end
    

    或者如果您希望在不同的迁移中执行此操作

    class AlterSlugs < ActiveRecord::Migration
      def self
        #add_index :slugs,:name,:unique
        #add_column :slugs,:id,:primary_key        
      end
    
      def self.down
      end
    end
    

    其实很有趣->如果你切换这两行(add_index 和 add_column)...它不会工作!

    【讨论】:

      【解决方案2】:

      你遇到了this bug

      (我假设您使用的是 Windows) 您可以通过将新文件:///C:/../mysql/lib/opt/libmysql.dll 从 mysql 5.1 安装复制到 Ruby/bin 目录来解决它。

      然后它再次工作!

      【讨论】:

        【解决方案3】:

        您需要将“libmysql.ddl”重新复制并粘贴到 ruby​​ 的 bin 文件夹中。

        如果您已将它安装在您的机器中或从其他来源,您可以在 Mysql Workbench 的文件夹中获取它。

        【讨论】:

          【解决方案4】:

          尝试使用以前版本的 mysql gem 而不是 mysql2...

          gem 'mysql', '2.8.1'
          # gem 'mysql2'
          

          我在两个不同的项目中遇到过两次这个错误,这在这两种情况下都节省了我的时间:) 还值得一提的是 add_index 在 Ubuntu 中使用 mysql2 完全没有问题。我想这是一个仅限 Windows 的问题。

          【讨论】:

            猜你喜欢
            • 2016-03-02
            • 1970-01-01
            • 2011-12-19
            • 2011-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-30
            • 1970-01-01
            相关资源
            最近更新 更多