2014-06-07 14 views
1

我有一個非常簡單的表,幾乎是鍵/值存儲,像DataMapper的說類型錯誤:從零的隱式轉換爲整數

class Device 
    include DataMapper::Resource 
    property :token, Text, :key => true 
end 

,當然我定義後調用DataMapper.finalize,因爲我m使用Sinatra。

當我創建一個新的設備,這樣

Device.create(:token => "Foo Bar") 

我得到這一切的巨型自卸

~ (0.000063) SET sql_auto_is_null = 0 
~ no implicit conversion from nil to integer 
TypeError: no implicit conversion from nil to integer 
    from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/quoting.rb:12:in `quote_string' 
    from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/quoting.rb:12:in `quote_value' 
    from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/command.rb:69:in `block in escape_sql' 
    from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/command.rb:62:in `gsub!' 
    from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/command.rb:62:in `escape_sql' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:114:in `execute_non_query' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:114:in `block (2 levels) in create' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:276:in `with_connection' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:113:in `block in create' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:85:in `each' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:85:in `create' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/repository.rb:146:in `create' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource/persistence_state/transient.rb:74:in `create_resource' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource/persistence_state/transient.rb:25:in `commit' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:963:in `_persist' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:977:in `block in create_with_hooks' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:974:in `catch' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:974:in `create_with_hooks' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:1028:in `save_self' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations.rb:54:in `save_self' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:1013:in `block in _save' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:1229:in `run_once' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:1012:in `_save' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:412:in `save' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations.rb:40:in `block in save' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations/context.rb:16:in `in_context' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations.rb:40:in `save' 
    from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations.rb:130:in `create' 
    from (irb):19 
    from /usr/bin/irb:12 

,當然當我運行中西納特拉完全相同的代碼非常類似的事情發生。我正在運行Ruby 2.0,以防萬一它不明確。

任何線索?

編輯:由於時間限制,我已經轉移到Rails,但我喜歡Sinatra,我仍然喜歡做這項工作,所以如果有人有想法,我仍然非常歡迎他們。

+0

安裝你運行'DataMapper.auto_migrate!'?如果沒有運行它,讓我知道。 –

+0

我已經在我的數據存儲中有一個模式,沒有必要運行它,但只是爲了好玩,我運行它(在Finalize之後,因爲還有哪些地方你甚至應該在Sinatra應用程序中運行它)?完全相同的轉儲(保存幾行數字等)。 – Morpheu5

+0

奇怪。它適用於我的DataMapper + Sqlite + Ruby 2.0安裝程序。 'Device.all#=> [#]' – kiddorails

回答

0

我只是花了幾個小時拉着我的頭髮,試圖克服Ubuntu 14.04(可靠)這個確切的問題。它似乎完全沒有意義,試圖調試數據對象中的問題寶石是徒勞的。

我的解決方案:卸載libmariadbclient-dev,安裝libmysqlclient-dev,重新部署並終於運行。

希望這會有所幫助。

+0

謝謝,但我已經在使用MySQL,而不是MariaDB。 – Morpheu5

0

我有完全相同的問題,並且還使用了Ruby 2.0(OS X Mavericks上的默認ruby)。升級到2.1.2解決了這個問題。

如果你實際使用的是OS X,我會建議通過RVM

\curl -sSL https://get.rvm.io | bash -s stable --ruby 
相關問題