我目前正在使用Rails(CreateFile
)和MySQL
我想用我的Rails应用程序设置MemSQL。
我按照教程让DockSQL在docker容器中运行OSX。它工作正常
我在4.2.0
。
我成功地跑了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项目会出现此错误 我做了以下事情:
schema.rb的内容
schema_migrations
这个问题对于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
表定义主键或分片键?
答案 0 :(得分:0)
Memsql是一个分布式数据库。这可能意味着它需要某种形式的分片(水平分区 - 当然是逻辑!)。默认情况下,如果未明确指定,Memsql将使用主键作为分片键。在您的情况下,似乎有些表缺少主键并且未指定分片键。因此,您必须为这些表设置主键或显式选择分片键列。有关详细信息,请参阅Memsql documentation。