ste*_*och 42 sqlite ruby-on-rails
今晚开发时遇到此错误消息: SQLite3::BusyException: database is locked:
我有两个型号:
要创建播客:
我正在尝试使用我的rails应用程序来利用json feed还详细说明属于此Podcast的曲目的名称(和艺术家)这一事实.
我认为以下before_validation方法会在我们创建新的Podcast时自动创建所有关联的Tracks.
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
Run Code Online (Sandbox Code Playgroud)
我怎么能绕过这个?看起来rails(或sqlite3)不喜欢以这种方式创建关联模型的新实例.我怎么能这样做?我怀疑这是一个像sqlite3一样的rails问题.我可以发布更多代码,如果它会有所帮助.
tri*_*web 62
对于在Rails控制台打开时遇到SQLite锁定开发问题的任何其他人,请尝试以下方法:
只需运行以下命令:
ActiveRecord::Base.connection.execute("BEGIN TRANSACTION; END;")
Run Code Online (Sandbox Code Playgroud)
无论如何,对我来说,它似乎清除了控制台所持有的任何事务并释放了数据库.
在运行delayed_job时,这对我来说尤其是一个问题,这似乎在经常关闭事务时失败了.
mar*_*ion 22
对我来说......我遇到的问题是,我打开一段时间的Rails控制台似乎锁定了与SQLite的连接.
所以,一旦我退出该控制台,并重新启动我的网络服务器(瘦)它就完美了.
我尝试了@ trisweb的建议,但它对我不起作用.
Dev*_*n M 21
SQLite实际上不应该用于并发访问,这是你在这里遇到的问题.您可以尝试增加database.yml文件中的超时,这可能是您在这种情况下的解决方法.但是,我建议您切换到另一个支持多个连接的数据库,如MySQL或PgSQL.
Tar*_*que 16
我有相同的"ActiveRecord :: StatementInvalid:SQLite3 :: BusyException:数据库被锁定:INSERT INTO"users"("created_at","email","name","password_digest","updated_at")VALUES(?,? , ?, ?, ?)" 问题.我尝试了谷歌的各种方式,但我失败了.当我关闭我的SQLite数据库浏览器时,问题就解决了.
确保没有2个警卫或几个控制台在运行.如果你想确保拼命看到上面的"无名字"答案.
你也可以尝试增加游泳池:
例如:在config/database.yml中更改测试部分,如下所示
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 50
timeout: 5000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37353 次 |
| 最近记录: |