2013-01-22 47 views
4

當通過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可用。

2之間的巨大差異,似乎是隻有前者瞭解:size_t

我的問題是:是否有2個不同的FFI? 如果是這樣的話:我如何確保我的寶石加載正確的ffi? 如果不是:我做錯了什麼? PS:我是sqlanywhere-ffi gem的作者,所以如果問題是我依賴於錯誤的東西,我可以改變它。目前它具有作爲在gemspec,gemfile和它在主要入口點的requires 'ffi'的依賴性的ffi。

回答

3

(我編輯了回溯文件路徑的開始)。

我猜你的Tomcat目錄的完整路徑包含空格,請確保它沒有。

jruby-1.6版本沒有發生此問題。

+0

任何修復?出現在jruby176 – ted

+1

請確保您的webapps目錄的路徑不包含空格,這將解決此問題。不幸的是,我有很多jruby 1.7.6尚未解決的問題。降級到1.7.4「固定」他們。 – m0gg