FBR은 jRuby를 통해 레일을 실행할 때 :size_t
을 인식하지만 Warbler를 사용하여 .war 파일을 만들고 java -jar my_project.war
또는 Tomcat을 사용하여 실행 한 후에는 읽을 수 없습니다.왜곡자는 size_t를 이해하지 못하는 다른 ffi를 사용하는 것 같습니다
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가 있습니다.
- normal FFI gem.
- jruby-stdlib ffi.
2의 큰 차이점은 전적으로 :size_t
을 이해하고있는 것으로 보입니다.
내 질문은 : 2 개의 다른 FFI가 있습니까? 만약 그렇다면 : 어떻게 내 보석이 올바른 ffi를로드하는지 확인합니까? 그렇지 않은 경우 무엇이 잘못 되었나요?
추신 : 저는 sqlanywhere-ffi 보석의 저자입니다. 문제가 잘못된 것일 경우 변경할 수 있습니다. 현재 gemspec, gemfile에 종속 관계가없고 기본 입력 지점에 requires 'ffi'
인 ffi가 있습니다.
수정 사항? 함께 표시 jruby176 – ted
webapps- 디렉토리의 경로에 공백이 포함되지 않아이 문제를 해결해야합니다. 불행히도 jruby 1.7.6에는 해결되지 않은 다른 많은 문제가있었습니다. 1.7.4로 Dowgrading하여 "고정". – m0gg