當通過jRuby運行rails時,FFI理解:size_t
,但在使用Warbler創建.war文件並使用java -jar my_project.war
或Tomcat運行該文件之後,FFI理解不到:size_t
。鶯似乎使用不同的ffi,不明白size_t
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
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可用。
- The normal FFI gem。
- jruby-stdlib ffi。
2之間的巨大差異,似乎是隻有前者瞭解:size_t
。
我的問題是:是否有2個不同的FFI? 如果是這樣的話:我如何確保我的寶石加載正確的ffi? 如果不是:我做錯了什麼? PS:我是sqlanywhere-ffi gem的作者,所以如果問題是我依賴於錯誤的東西,我可以改變它。目前它具有作爲在gemspec,gemfile和它在主要入口點的requires 'ffi'
的依賴性的ffi。
任何修復?出現在jruby176 – ted
請確保您的webapps目錄的路徑不包含空格,這將解決此問題。不幸的是,我有很多jruby 1.7.6尚未解決的問題。降級到1.7.4「固定」他們。 – m0gg