작은 Java 클래스를 작성하여 xls 파일에서 임베드 된 이미지를 읽고 내 Ruby on Rails 응용 프로그램의 백그라운드 프로세스 (Sidekiq 사용)에서 사용해야 할 것입니다. 그러나 sidekiq 프로세스가 Rjb가 사용되는 메소드의 실행을 시작할 때 JVM이 오류 guarantee(get_thread() == thread) failed: must be the same thread, quickly
을 던지므로 스레딩에 몇 가지 문제가있는 것처럼 보입니다.Ruby Java Bridge with threads (Sidekiq)
이렇게 설정하는 방법입니다.
는 내가이
require 'rjb'
JARS = Dir.glob("#{Rails.root}/lib/java_libs/*.jar").join(':')
Rjb::load(JARS)
EXCEL_IMAGE_READER = Rjb::import('tools.ImageReader')
가 그럼 난 내 백그라운드 프로세스에서 그것을 사용하는 상기 R1b가
def get_excel_images
p 'Starting to get the images'
images = []
image_reader = EXCEL_IMAGE_READER.new(@excel_path)
image_reader.get_file_names.each do |file_name|
images << Attachment.new_from_bytes(image_reader.get_file(file_name), file_name)
end
images
end
은 그러나 즉시 방법을 실행하기 시작함에 따라 JVM이를 throw 설정하는 초기화를 썼다 예외. Sidekiq의 로그입니다.
2014-10-30T09:47:02Z 11748 TID-17e7qk INFO: Running in ruby 2.1.1p76 (2014-02-24 revision 45161) [i686-linux]
2014-10-30T09:47:02Z 11748 TID-17e7qk INFO: See LICENSE and the LGPL-3.0 for licensing details.
2014-10-30T09:47:02Z 11748 TID-17e7qk INFO: Starting processing, hit Ctrl-C to stop
2014-10-30T09:47:31Z 11748 TID-19393k Sidekiq::Extensions::DelayedClass JID-08eac9ed686f8d6146cda67f INFO: start
"Starting to get the images"
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (threadLocalStorage.cpp:60), pid=11748, tid=2960567104
# guarantee(get_thread() == thread) failed: must be the same thread, quickly
#
# JRE version: OpenJDK Runtime Environment (7.0_65-b32) (build 1.7.0_65-b32)
# Java VM: OpenJDK Client VM (24.65-b04 mixed mode, sharing linux-x86)
# Derivative: IcedTea 2.5.3
# Distribution: Ubuntu 12.04 LTS, package 7u71-2.5.3-0ubuntu0.12.04.1
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/mika/projects/my_project/hs_err_pid11748.log
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
# http://icedtea.classpath.org/bugzilla
#
Aborted (core dumped)
은 내가
get_excel_images
방법으로 초기화에서 물건을 이동하려하지만 아무런 영향을 미치지 않았다. 이 코드는 콘솔이나 rspec 테스트를 통해 직접 실행하면 작동합니다.
아무도 아이디어를 어떻게 해결할 수 있습니까?
답변을 업데이트로 옮기고 답변을 수락하는 것이 좋습니다. IMO 나는이 질문을 끝내 겠지만 명확한 깃발이 없다. 상세한 Q를 들었지만 그 대답은 Java를 지원하는 Ruby 구현으로 짧게 변경되었습니다. 지금 생각해 보면, 대부분의 사람들은 Java를 프로젝트에 추가하고자한다면 JRuby로 직행 할 것이라고 생각합니다. – onebree
음. 나는 최근에 MRI Ruby로 다시 전환했으며 모든 자바 항목을 독립적 인 데몬 프로세스로 옮겼습니다. 루비와 데몬은 TCP 소켓을 통해 통신하고 있습니다. 나는 JRuby의 느린 속도에 좌절감을 느꼈다. 이제 MRI Ruby로 다시 앱을 개발할 수있게 된 것을 기쁘게 생각합니다. – Mika
그 의견으로 답을 업데이트하고 JRuby를 선택한 이유를 설명하고 MRI로 다시 전환하는 방법을 설명했습니다. 답변에 "업데이트"를 포함시키고 질문에서 제거하십시오. 가능한 경우 답변에 코드를 표시하십시오. 그런 다음이 Q & A를 "완료"하기 위해 그것을 수락하십시오. – onebree