Как создавать таблицы Cassandra с помощью кевеля (без использования рельсов)

Я использую Cequel в качестве 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

Но этот синтаксис отличается от документированного определения Record, и я нашел его, только просматривая исходный код. Но это создает две проблемы.

  • Код накладных расходов
  • Я не знаю синтаксис для has_many а также belongs_to поэтому я не могу создать таблицу правильно, если запись включает это

Я пропускаю метод для автоматического создания таблицы из Project определение класса?

1 ответ

Таблицы могут быть созданы путем вызова метода synchronize_schema на уроке. Итак, в вашем случае вы должны выполнить Project.synchronize_schema прежде чем на самом деле пытаться читать / писать в него.

Учитывая, что вы строите более широкий проект, вы можете рассмотреть возможность использования для него задач Rake. Вам также необходимо выполнить миграцию, чтобы таблицы фактически создавались в Cassandra. Ты можешь использовать rake cequel:migrate для этого. Есть еще задачи, которые вы можете увидеть через rake --tasks,

Если вы создаете свой собственный проект с пользовательскими местами для моделей, вам, вероятно, нужно немного взломать задачу миграции граблей. Это реализация, которую я сделал для своего проекта https://github.com/octoai/gems/blob/master/octo-core/Rakefile. Также посмотрите, как определяются модели https://github.com/octoai/gems/tree/master/octo-core/lib/octocore/models

Надеюсь это поможет.

Другие вопросы по тегам