2011-03-27 226 views
3

我正在通過Michael Hartl的Ruby on Rails教程,並在第6章中指導我創建一個新遷移,以便將索引添加到用戶表。rake db:migrate正在拋出BusyException:數據庫被鎖定異常

這裏是我的移民:

def self.up 
    add_index :users, :email, :unique => true 
end 

def self.down 
    remove_index :users, :email 
end 

當我運行耙分貝:遷移它認爲一秒鐘,然後拋出一個BusyException,並表示該數據庫被鎖定。數據庫是一個sqlite3數據庫,存儲在我的本地計算機上的用戶文件夾中;沒什麼特別的。

任何和所有的幫助,非常感謝。

+0

,移民是試圖在'users.email'列中添加索引,但你在談論增加一個新列。困惑? – 2011-03-27 23:59:59

+0

你說得對,我試圖在users表中添加一個索引到email列,而不是一個新列。謝謝你指出。 – YuKagi 2011-03-28 04:20:12

回答

7

我一直都在這樣做,它的出發點在於sqlite一次只能被一個進程訪問,並且數據庫被該進程鎖定。確保您沒有服務器或控制檯在另一個終端中運行。如果你繼續得到這一點,你肯定沒有什麼別的訪問一個SQLite數據庫(包括殭屍程序),你可以在這裏照做:

How do I unlock a SQLite database?

+0

完美。這正是發生了什麼事情。我查看是否有服務器正在運行,並且想不到其他任何可以訪問它的進程,但是我只是終止了終端並且一切正常。非常感謝你克里斯托弗。 – YuKagi 2011-03-28 02:05:37

2

幾乎是同一已經happended給我。 簡單的解決方案是從我的導軌控制檯退出。它鎖定了SQLite。

1

/同意克里斯托弗

對於我們這些基於UNIX的機器,一個簡單的

$: ps -a | grep ruby 
$: kill -s 9 XXXX 
紅寶石過程從終端我懷疑爲罪魁禍首爲我做

。它總是由一個控制檯或服務器引起的,這個控制檯或服務器以一種讓我殺死它的方式掛起,然後必須找到'殭屍'進程來解鎖數據庫。

在windows上,它肯定不會比殺死可疑進程樹更難。

2

我有同樣的問題。對我來說,我讓SQLite數據庫瀏覽器打開,並鎖定了它。

+0

對我來說完全一樣。 – holyredbeard 2013-02-06 23:20:32

0

對我的BusyException問題的解決方案,回想起來是「顯而易見」的,那就是我沒有對SQLite3數據庫的寫權限。我把git克隆了一個rails項目到一個windows服務的文件系統,這個文件系統是我從Ubuntu中訪問的。無論出於何種原因,Sqlite3數據庫是使用+ x權限創建的,其中Sqlite3必須解釋爲繁忙。

只有在確認版本,寶石,紅寶石等大量工作後,我才注意到文件權限是+ x。

當然,這是一個神祕的一套情況,但我在兩週的時間裏一直在解決問題,但沒有找到Google的幫助,我想我會爲知識庫添加解決方案。

0

對我而言,沒有任何工作。我刪除了所有的* .sqlite3文件,然後運行

rake db:create 
rake db:migrate 

然後它工作。

PS:sqlite3的文件位於根目錄的文件夾分貝的Rails項目

相關問題