2013-01-22 4 views
4

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가 있습니다.

2의 큰 차이점은 전적으로 :size_t을 이해하고있는 것으로 보입니다.

내 질문은 : 2 개의 다른 FFI가 있습니까? 만약 그렇다면 : 어떻게 내 보석이 올바른 ffi를로드하는지 확인합니까? 그렇지 않은 경우 무엇이 잘못 되었나요?

추신 : 저는 sqlanywhere-ffi 보석의 저자입니다. 문제가 잘못된 것일 경우 변경할 수 있습니다. 현재 gemspec, gemfile에 종속 관계가없고 기본 입력 지점에 requires 'ffi' 인 ffi가 있습니다.

답변

3

(필자는 백 트레이스에서 파일 경로의 시작 부분을 편집했습니다).

톰캣 디렉토리의 전체 경로에는 공백이 포함되어 있습니다. 그렇지 않은지 확인하십시오.

이 문제는 jruby-1.6 버전에서는 발생하지 않았습니다.

+0

수정 사항? 함께 표시 jruby176 – ted

+1

webapps- 디렉토리의 경로에 공백이 포함되지 않아이 문제를 해결해야합니다. 불행히도 jruby 1.7.6에는 해결되지 않은 다른 많은 문제가있었습니다. 1.7.4로 Dowgrading하여 "고정". – m0gg