Я использую Rails 5.1 с Postgresql 9.6.9 на бесплатном уровне Heroku.
Недавно я использовал задачу rake с файлами csv, чтобы попытаться создать пару пакетов или записей. Затем я хотел протестировать внешний интерфейс и просто убедиться, что мои формы работают так же, как в процессе разработки.
Однако, когда я пошел, чтобы добавить новую запись с формой, я продолжал получать ошибку 500. Когда я проверяю свои журналы Heroku, я получаю эту ошибку.
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ОШИБКА: повторяющееся значение ключа нарушает уникальное ограничение «games_pkey»
В нем будет указан идентификатор, который он пытался использовать, который будет более низким идентификатором, который использовался, когда я импортировал записи через задачу rake и файл csv.
Я подтвердил, что это действительно была проблема, постоянно пытаясь использовать мою форму для создания записи, которая, наконец, прошла примерно после 20 попыток и получила правильный следующий идентификатор.
Я не уверен, что это ошибка, вызванная Postgres или Rails. Это явно началось, когда я начал использовать задачу rake и файл csv. В файле csv есть атрибут ID, который использовался для простой проверки обновления или создания нового файла, но, возможно, это было моей причиной.
Любые советы о том, как предотвратить эту ошибку, были бы замечательны, так как я также загрузил другие файлы csv для других моделей еще большими партиями. Я хотел бы продолжать делать это, но только если я смогу избежать этой ошибки, чтобы я мог добавить одну или две с помощью простой формы, которая у меня есть, когда это возможно.
Спасибо за помощь.
Вот код задачи rask, который, возможно, вызывает проблему:
CSV.foreach(filename, {col_sep: ";", headers: true}) do |row|
game_hash = row.to_h
game = Game.find_by(id: game_hash["id"])
if(!game)
game = Game.create(game_hash)
else
game.update(game_hash)
end
end
game_hash.symbolize_keys!
после строки 2 06.08.2018game_hash[:id]
. 06.08.2018