当通过jRuby运行rails时,FFI理解:size_t
,但是在使用Warbler创建.war文件并使用java -jar my_project.war
或Tomcat运行它之后,它不会理解。
Linux | Windows
-----------------------------+-------------
java -jar works | doesn't work
tomcat works | doesn't work
rails s (using jruby) works | works
Linux和Windows在比较中使用相同的war文件。
以下是在Windows上运行java -jar
的回溯的顶部。 (我在backtrace中编辑了文件路径的开头)。
--- Backtrace
TypeError: unable to resolve type 'size_t'
find_type at jar:file:/my_project.war/WEB-INF/lib/jruby-stdlib-1.7.2.jar!/META-INF/jruby.home/lib/ruby/shared/ffi/types.rb:55
type_size at jar:file:/my_project.war/WEB-INF/lib/jruby-stdlib-1.7.2.jar!/META-INF/jruby.home/lib/ruby/shared/ffi/types.rb:147
SQLAnywhere at my_project.war/WEB-INF/gems/gems/sqlanywhere-ffi-1.0.1/lib/sqlanywhere.rb:13
(root) at my_project.war/WEB-INF/gems/gems/sqlanywhere-ffi-1.0.1/lib/sqlanywhere.rb:5
require at org/jruby/RubyKernel.java:1027
当我查看回溯中的文件时,它们会列出各种c类型,但不会列出size_t
。
在我看来,jRuby有2个FFI可供使用。
2之间的巨大差异似乎只有前者理解:size_t
。
我的问题是:有两种不同的FFI吗? 如果是这样:我如何确保我的宝石加载正确的ffi? 如果不是:我做错了什么?
PS:我是sqlanywhere-ffi gem的作者,所以如果问题是我依赖于错误的东西,我可以改变它。目前,它在gemspec,gemfile和主入口点requires 'ffi'
中具有ffi作为依赖性。
答案 0 :(得分:3)
(我在backtrace中编辑了文件路径的开头)。
我想Tomcat目录的完整路径包含空格,请确保它没有。
jruby-1.6版本没有出现此问题。