私は xls ファイルから埋め込み画像を読み取る小さな Java クラスを作成しましたが、これを Ruby on Rails アプリケーションのバックグラウンド プロセス (Sidekiq を使用) で使用する必要があります。guarantee(get_thread() == thread) failed: must be the same thread, quickly
しかし、sidekiq プロセスが Rjb が使用されているメソッドの実行を開始すると、JVM がエラーをスローするため、スレッドに問題があるようです。
これが私が設定した方法です。
rjb を設定するためのイニシャライザを書きました
require 'rjb'
JARS = Dir.glob("#{Rails.root}/lib/java_libs/*.jar").join(':')
Rjb::load(JARS)
EXCEL_IMAGE_READER = Rjb::import('tools.ImageReader')
次に、バックグラウンドプロセスで使用します
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 は例外をスローします。これが 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 テストを介して実行すると、コードは機能します。
これを解決する方法はありますか?