如何用cequel创建Cassandra表(不使用rails)

时间:2015-05-20 13:50:22

标签: ruby cassandra cequel

我使用Cequel作为没有导轨的Cassandra的ORM 我在尝试创建一个简单的项目列表时遇到了问题。 首先,我使用三列来定义模型,这三列应属于复合键。

class Project
  include Cequel::Record

  key :client, :text, { partition: true }
  key :type, :text, { partition: true }
  key :dep, :text, { partition: true }

end

稍后当我尝试通过

创建项目时
project = Project.create!({client: "test", type: "test", dep: "test"})

我收到表不存在的错误。 这些表不是使用Project.create!自动创建的,但我必须先手动创建表:

  connection.schema.create_table(:projects) do 
    partition_key :client, :text
    partition_key :type, :text
    partition_key :dept, :text
  end

但是这种语法与记录的记录定义不同,我只是通过筛选源代码找到它。但这会产生两个问题。

  • 代码开销
  • 我不知道has_manybelongs_to的语法,所以如果记录包含此内容我无法正确创建表

我是否忽略了从Project类定义自动创建表的方法?

1 个答案:

答案 0 :(得分:1)

可以通过调用类上的方法synchronize_schema来创建表。因此,在您的情况下,您应该在实际尝试读/写之前执行Project.synchronize_schema

鉴于您正在构建更广泛的项目,您可以考虑使用Rake任务。您还需要进行迁移,以便在Cassandra中创建实际表。您可以使用rake cequel:migrate。您可以通过rake --tasks查看更多任务。

如果要使用模型的自定义位置创建自定义项目,则可能需要稍微破解rake迁移任务。这是我为我的项目https://github.com/octoai/gems/blob/master/octo-core/Rakefile#L75所做的实现。另请参阅模型的定义https://github.com/octoai/gems/tree/master/octo-core/lib/octocore/models

希望这有帮助。