Ruby: SQLite3 :: BusyException: база данных заблокирована:

В ходе разработки сегодня вечером обнаружил это сообщение об ошибке: SQLite3 :: BusyException: база данных заблокирована:

У меня есть две модели:

  • Подкасты содержат много треков
  • треков принадлежат подкастам.
  • Файлы подкастов размещены на mixcloud .

Чтобы создать подкаст:

  • пользователь отправляет URL-адрес подкаста на mixcloud
  • rails приложение захватывает json-канал, связанный с url
  • json используется для установки атрибутов (заголовок, изображение и т. д.) в новом объекте Podcast

. Я пытаюсь заставить мое приложение rails воспользоваться тем фактом, что в json-фиде также указываются имена (и исполнители ) треков, которые принадлежат этому подкасту.

Я думал, что следующий метод before_validation будет автоматически создавать все связанные треки всякий раз, когда мы создаем новый подкаст.

class Podcast < ActiveRecord::Base
  attr_accessible :mixcloud_url, :lots, :of, :other, :attrs
  has_many :tracks    
  before_validation :create_tracks
  def create_tracks
    json = Hashie::Mash.new HTTParty.get(self.json_url)    
    json.sections.each do |section|
      if section.section_type=="track"
          Track.create(:name=>section.track.name, :podcast_id=>self.id)
      end
    end             
  end
end

Как я могу обойти это? Похоже, что rails (или sqlite3) не любит, когда я создаю новые экземпляры связанной модели таким образом. Как еще я могу это сделать? Я подозреваю, что это такая же проблема с рельсами, как и с sqlite3. Я могу опубликовать дополнительный код, если он поможет.

42
задан stephenmurdoch 22 August 2011 в 23:16
поделиться