2010-10-02 16 views
2

我在執行數據庫時遇到了一些問題:從heroku拉回我的本地開發環境。來自heroku的數據庫拔取失敗,出現Encoding :: CompatibilityError

我的設置是通過Mac OS X Snow Leopard通過RVM從MacPorts安裝在本地Rails 3/Ruby 1.9.2環境中的MySQL(5.1.50),並且我已成功執行heroku db:push到生產站點Heroku很多次。但是,二次開發機相同的設置,當我嘗試拉Heroku的DB回通過heroku db:pull上,我碰到下面的錯誤,它的下載一小會兒表和索引的信息後:

/Users/jschuur/.rvm/gems/ruby-1.9.2-p0/gems/sequel-3.15.0/lib/sequel/adapters/shared/mysql.rb:399:in `join': incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError) 
    from /Users/jschuur/.rvm/gems/ruby-1.9.2-p0/gems/sequel-3.15.0/lib/sequel/adapters/shared/mysql.rb:399:in `multi_insert_sql' 

以下是相關的寶石:

ruby-mysql (2.9.3) 
sequel (3.15.0) 
mysql2 (0.2.4) 
taps (0.3.13) 
heroku (1.10.6, 1.10.5, 1.10.0) 

完整的錯誤和寶石清單here

在我的主生產機器上發生同樣的錯誤順便說一句(我一直在做成功的數據庫:推到heroku形式)。

現在我明白,這基本上是一個UTF8編碼錯誤。 FWIW,我的database.yml明確引用UTF8:

development: 
    adapter: mysql2 
    encoding: utf8 
    database: rails_dev_dbname 
    pool: 5 
    username: rails 
    socket: /tmp/mysql.sock 

現在有趣的是,如果我創建只是一個單一的測試項,我可以推/拉細幾乎空白的DB。所以很明顯,在我的非UTF8數據集中。雖然目前還沒有很多數據,但我完全有可能複製其中包含時髦引用或版權符號的文本。

所以問題是,我該如何解決這個問題? Heroku文檔會在您推送時向您的數據庫網址提及appending '?encoding=utf',但我認爲我的默認heroku db:push將數據發送給Heroku,首先使用database.yml,該數字已經包含該設置。無論哪種方式,我這樣做了一個明確的推動,並且隨後的拉動仍然有同樣的問題。

回答

2

我將ruby版本切換到1.8.7,當我在出現錯誤時使用水龍頭進行推拉時,您可能需要嘗試一下。

如果你不使用這個已經使用RVM來管理你的ruby版本

+0

呵呵。那有竅門,但爲什麼? 1.9中可能出現了一些新的默認值,這與輕拍寶石假設相沖突。感謝您及時的回覆。 – 2010-10-02 23:28:43

+0

是的,這也是我的猜測。 – s84 2010-10-03 02:34:19