带有MemSQL的Ruby On Rails。表`schema_migrations`必须具有PRIMARY或SHARD键

时间:2015-07-29 13:33:34

标签: ruby-on-rails ruby-on-rails-4 memsql

我目前正在使用Rails(CreateFile)和MySQL 我想用我的Rails应用程序设置MemSQL。

我按照教程让DockSQL在docker容器中运行OSX。它工作正常 我在4.2.0

中设置了MemSQL IP

我成功地跑了database.yml 但是,当运行rake db:create时,我收到以下错误:

rake db:migrate

我想我可以以某种方式编辑> rake db:migrate rake aborted! ActiveRecord::StatementInvalid: Mysql2::Error: Distributed tables must either have a PRIMARY or SHARD key. Visit http://docs.memsql.com/4.0/concepts/porting-apps/ for more information: CREATE TABLE `schema_migrations` (`version` varchar(255) NOT NULL) ENGINE=InnoDB Mysql2::Error: Distributed tables must either have a PRIMARY or SHARD key. Visit http://docs.memsql.com/4.0/concepts/porting-apps/ for more information 文件并尝试更改db/schema.rb表。但是id似乎不是一个好的解决方案,因为每次更新我的表时它都会被重新生成。

我应该怎么做才能解决这个问题?

修改

全新的rails项目会出现此错误 我做了以下事情:

  • 创建一个新的rails项目
  • 添加mysql2 gem
  • 将database.yml配置为memsql ip
  • 添加设计宝石
  • 使用设计添加用户表
  • rake db:create
  • rake db:migrate(此命令的结果如下)

schema.rb的内容

schema_migrations

编辑II

这个问题对于Rails Developer而言比MemSQL专家更多   - MemSQL需要处理它所处理的每个表的主键或分片键   - 但是Rails没有为其ActiveRecord::Schema.define(version: 20150729143850) do create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" 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" t.datetime "created_at", null: false t.datetime "updated_at", null: false end add_index "users", ["email"], name: "index_users_on_email", unique: true add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end 表定义一个 这个问题,给我带来了以下问题:
如何调整Rails以使其为schema_migrations表定义主键或分片键?

1 个答案:

答案 0 :(得分:0)

Memsql是一个分布式数据库。这可能意味着它需要某种形式的分片(水平分区 - 当然是逻辑!)。默认情况下,如果未明确指定,Memsql将使用主键作为分片键。在您的情况下,似乎有些表缺少主键并且未指定分片键。因此,您必须为这些表设置主键或显式选择分片键列。有关详细信息,请参阅Memsql documentation