#ruby-on-rails #api #schema #firebird
#ruby-on-rails #API #схема #firebird
Вопрос:
Во-первых, я использую ar_firebird_adapter
отличный адаптер, который позволяет довольно легко интегрировать Rails и FB (единственный адаптер, совместимый с Rails 6). Проблема, с которой я сталкиваюсь, заключается в том, что как только я подключаюсь к своей базе данных Firebird и запускаю rake db:schema:dump
, некоторые таблицы появляются следующим образом:
# Could not dump table "country" because of following StandardError
# Unknown type 'VARCHAR' for column 'currency'
# Could not dump table "customer" because of following StandardError
# Unknown type 'VARCHAR' for column 'customer'
# Could not dump table "department" because of following StandardError
# Unknown type 'VARCHAR' for column 'department'
# Could not dump table "employee" because of following StandardError
# Unknown type 'VARCHAR' for column 'phone_ext'
create_table "employee_project", primary_key: ["proj_id", "emp_no"], force: :cascade do |t|
t.boolean "emp_no", null: false
t.boolean "proj_id", null: false
t.index ["emp_no", "proj_id"], name: "rdb$primary14", unique: true
t.index ["emp_no"], name: "rdb$foreign15"
t.index ["proj_id"], name: "rdb$foreign16"
end
# Could not dump table "job" because of following StandardError
# Unknown type 'VARCHAR' for column 'job_title'
# Could not dump table "proj_dept_budget" because of following StandardError
# Unknown type 'INTEGER' for column 'fiscal_year'
# Could not dump table "project" because of following StandardError
# Unknown type 'VARCHAR' for column 'proj_name'
Как вы можете видеть, любая БД, которая является чистой и лишенной «неизвестных» типов, встречается нормально, но вышеуказанные типы отображаются как StandardError
(включая TIMESTAMP
)
Теперь, я прочитал, что мне нужно использовать rake db:structure:load
после того, как я поместил это в свой application.rb
:
config.active_record.schema_format = :sql
Проблема в том, что когда я использую rake db:structure:load
, я получаю именно эту ошибку:
rake aborted!
ActiveRecord::Tasks::DatabaseNotSupported: Rake tasks not supported by 'ar_firebird' adapter
Tasks: TOP => db:structure:dump
Означает ли это, что адаптер не использует эту команду rake, и если да, то как мне это исправить? Это огромное препятствие, которое мне нужно преодолеть! Я буду в восторге, если кто-нибудь сможет мне помочь.
Комментарии:
1. Вопрос также был отправлен на: github.com/rails-firebird/ar_firebird_adapter/issues/20
2. Похоже, вы используете пример базы данных сотрудников, включенной в Firebird. Имейте в виду, что в этом примере базы данных используются столбцы массива, которые многие инструменты и драйверы для Firebird не поддерживают (хотя, похоже, здесь проблема не в этом).
3. Спасибо за ссылку на эту метку. Да, сэр, вы правы в том, что это пример базы данных. Я хотел убедиться, что смогу успешно выполнить выгрузку в rails, прежде чем перейти к нашей живой базе данных. У вас есть какие-либо идеи?
4. К сожалению, у меня нет опыта работы с rails, поэтому я не могу здесь помочь.
5. Мы можем подсказать вам, что такое
Varchar
тип данных, какими свойствами он обладает, как интерпретировать вывод FB API или «системных таблиц» — но вам нужно будет закодировать его в библиотеку Ruby, которую вы используете, или попросить какого-нибудь заинтересованного специалиста, который бы это сделал…
Ответ №1:
Итак .. ответ был довольно простым; попробуйте другой адаптер, созданный той же группой парней!
В итоге я использовал firebird_adapter
и db:schema:dump
работал как шарм.
Мне пришлось учитывать несколько неизвестных типов данных в gem, но в остальном все было хорошо.
Спасибо за тех, кто посмотрел / прокомментировал.
Комментарии:
1. к сожалению, firebird_adapter не работает с Rails 6…
2. Да, к сожалению, вы правы. Я остановился на Rails 5.1, что вполне подходит для моего варианта использования.