2012-09-29 43 views
0

我想解析一個sqlite3數據庫在rails 3中(使用sqlite3-ruby gem)。要解析的數據庫來自文件上傳。這裏是我的控制器代碼:生產(Engineyard)SQLite3 :: NotADatabaseException(文件被加密或不是數據庫)

require 'fileutils' 
    require 'sqlite3' 

    tmp = params[:file_upload][:my_file] 
    file = params[:file_upload][:my_file].tempfile 
    filename = params[:file_upload][:my_file].original_filename 

    file = File.join("public", params[:file_upload][:my_file].original_filename) 
    FileUtils.cp tmp.path, filename 

    db = SQLite3::Database.new(filename) 

所以它的工作原理相當不錯,在當地,而不是在生產(與EngineYard的)。我收到以下錯誤:

SQLite3::NotADatabaseException (file is encrypted or is not a database) 

我不明白爲什麼。任何幫助將非常感激,因爲我真的不知道如何解決這個問題。

感謝

+0

通常這意味着文件是使用WAL模式創建的,並且您的sqlite模塊太舊了。 – schlenk

+0

我不熟悉WAL模式,但實際上我看到上傳sqlite3文件時在我的臨時目錄中創建了WAL文件。我正在使用以下寶石:sqlite3(1.3.6)和sqlite3-ruby(1.3.3) – mathieurip

+0

有關WAL的詳細信息,請參閱http://www.sqlite.org/draft/wal.html。 – schlenk

回答

0

根據你自己的問題Sqlite 3.7 on amazon ec2 with Engine Yard似乎:) Engine Yard的使用SQLite 3.6提供你,意思就是@schlenk上面給出了正確的答案: 該錯誤消息通常表明數據庫文件與創建WAL模式,這需要mysql 3.7,Engine Yard還沒有提供。

相關問題