0

我有一個rake任務,通過ID的CSV文件進行初始化。然後我查詢數據庫以查看該數據庫中是否存在該ID。如果存在,我使用act_as_taggable添加標籤。該腳本運行良好,直到它到達第一個匹配並嘗試向我的SQLite數據庫寫入標籤。我得到一個數據庫鎖定錯誤。我想知道如果我擊中SQLite的I/O限制,並需要切換到一個完整的MySQL數據庫。從CSV任務耙標記到SQLite的很多?

if defined?(Rails) && (Rails.env == 'development') 
    Rails.logger = Logger.new(STDOUT) 
end 

require 'csv' 
desc "Tag Voters that early voted from the Secretary of State Website" 
task :tag_early => [:environment] do 
    file ="db/AllAbsentees.csv" 

    CSV.foreach(file, :headers=> true) do |row| 
    @voter_id = row[1] 
    puts "Working on Row" + row[1] 
    @voter = Voter.where(:state_id => @voter_id).first() 
    unless @voter.blank? 
     @voter.tag_list = "2012_GEN_EARLY_VOTER" 
     @voter.save() 
     puts "Voter #" + @voter_id + "tagged" 
    end 
    end 
end 


    Voter Load (1.2ms) SELECT "voters".* FROM "voters" WHERE "voters"."state_id" = '00008030' LIMIT 1 
    ActsAsTaggableOn::Tag Load (0.2ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = 11944 AND "taggings"."taggable_type" = 'Voter' AND (taggings.context = 'tags' AND taggings.tagger_id IS NULL) 
    (0.1ms) begin transaction 
    (0.4ms) UPDATE "voters" SET "updated_at" = '2012-11-23 00:02:33.438114' WHERE "voters"."id" = 11944 
    ActsAsTaggableOn::Tag Load (0.1ms) SELECT "tags".* FROM "tags" WHERE (lower(name) = '2012_gen_early_voter') 
    ActsAsTaggableOn::Tag Load (0.2ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = 11944 AND "taggings"."taggable_type" = 'Voter' AND (taggings.context = 'tags' AND taggings.tagger_id IS NULL) 
    ActsAsTaggableOn::Tagging Exists (0.1ms) SELECT 1 AS one FROM "taggings" WHERE ("taggings"."tag_id" = 19 AND "taggings"."taggable_type" = 'Voter' AND "taggings"."taggable_id" = 11944 AND "taggings"."context" = 'tags' AND "taggings"."tagger_id" IS NULL AND "taggings"."tagger_type" IS NULL) LIMIT 1 
    SQL (1.4ms) INSERT INTO "taggings" ("context", "created_at", "tag_id", "taggable_id", "taggable_type", "tagger_id", "tagger_type") VALUES (?, ?, ?, ?, ?, ?, ?) [["context", "tags"], ["created_at", Fri, 23 Nov 2012 00:02:33 UTC +00:00], ["tag_id", 19], ["taggable_id", 11944], ["taggable_type", "Voter"], ["tagger_id", nil], ["tagger_type", nil]] 
    (5053.1ms) commit transaction 
SQLite3::BusyException: database is locked: commit transaction 
    (99.7ms) rollback transaction 
rake aborted! 
SQLite3::BusyException: database is locked: commit transaction 

回答

1

SQLite並沒有太多的併發性;對於要寫入數據庫的事務,必須沒有其他讀或寫連接。

確保沒有其他程序正在同時讀取或寫入數據庫,並且您自己的程序中的所有數據庫訪問都使用相同的數據庫連接。

+0

昨晚我安裝了MySQL,當我回到家時,它工作正常。 – gsueagle2008