【发布时间】:2011-11-01 13:13:14
【问题描述】:
今晚开发时遇到此错误消息:SQLite3::BusyException: database is locked:
我有两个模型:
- 播客有很多曲目
- 曲目属于播客。
- 播客文件托管在mixcloud。
创建播客:
- 用户在 mixcloud 上提交播客的网址
- rails 应用抓取与 url 关联的 json 提要
- json 用于设置新 Podcast 对象的属性(标题、图像等)
我正在尝试让我的 rails 应用程序利用 json 提要还详细说明属于此 Podcast 的曲目的名称(和艺术家)这一事实。
我认为以下 before_validation 方法会在我们创建新 Podcast 时自动创建所有关联的 Track。
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 一样是 rails 问题。如果有帮助,我可以发布更多代码。
【问题讨论】:
-
ps - 当我提交一个新的播客时会显示错误,我很确定我对提要的解析不是问题。
-
pps - :json_url 是在另外一个 before_validation 方法中设置的,我只是没提,确实工作正常
-
AFAIK sqlite 在操作数据时会锁定整个数据库文件(因为它是唯一的),所以您可能会遇到问题。 Sqlite 不适合有多个并发用户的应用程序使用。
-
对我来说,问题是我打开了用于 SQLite 的 DB Browser。
标签: ruby-on-rails sqlite