Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby DataMapper说TypeError:没有从nil到integer的隐式转换_Ruby_Sinatra_Datamapper - Fatal编程技术网

Ruby DataMapper说TypeError:没有从nil到integer的隐式转换

Ruby DataMapper说TypeError:没有从nil到integer的隐式转换,ruby,sinatra,datamapper,Ruby,Sinatra,Datamapper,我有一个非常简单的表,几乎是一个键/值存储,类似 class Device include DataMapper::Resource property :token, Text, :key => true end 当然,我在定义后调用DataMapper.finalize,因为我使用的是Sinatra 当我创建一个新设备时,像这样 Device.create(:token => "Foo Bar") 我得到了所有这些巨大的垃圾 ~ (0.000063) SE

我有一个非常简单的表,几乎是一个键/值存储,类似

class Device
    include DataMapper::Resource
    property :token,    Text, :key => true
end
当然,我在定义后调用
DataMapper.finalize
,因为我使用的是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
当然,当我在Sinatra中运行完全相同的代码时,也会发生类似的事情。我正在运行Ruby 2.0,以防不清楚

有什么线索吗


编辑:由于时间限制,我已经搬到了Rails,但我喜欢Sinatra,我仍然想让它发挥作用,所以如果有人有想法,我仍然非常欢迎。

我只是花了几个小时在Ubuntu 14.04上努力克服这个确切的问题。这似乎完全是无稽之谈,试图在data objects gem中调试问题是徒劳的

我的解决方案是:卸载
libmariadbclient dev
,安装
libmysqlclient dev
,重新部署,它终于工作了


希望这能有所帮助。

我也遇到了完全相同的问题,而且还使用了Ruby 2.0(默认的Ruby on OS X Mavericks)。升级到2.1.2修复了该问题

如果您实际使用的是OS X,我建议您使用安装via


您是否运行了
DataMapper.auto_migrate?如果不运行它,请告诉我。我的数据存储中已经有一个模式,没有必要运行它,但只是为了好玩,我运行了它(就在finalize之后,因为在Sinatra应用程序中,你还应该在哪里运行它?),我得到了几乎完全相同的转储(除了一些行号之类的内容)。奇怪。它在我的DataMapper+Sqlite+Ruby2.0设置中运行得非常好
Device.all#=>[#]
@kiddorails,事实上我可以毫无问题地获取所有
Device
s,我只是无法让它创建新的。@Morpheu5上面的列表(在我的输出中)是由
Device.create(:token=>“Foo Bar”)
本身创建的。
\curl -sSL https://get.rvm.io | bash -s stable --ruby