RJBとは
Ruby Java Bridge。
簡単に言うと「Ruby から Java のライブラリを使用する」もの。
開発環境
- WSL2(Ubuntu 20.04LTS)
- Docker
- Ruby 1.8.7
- Rails 2.1.0
- rjb-1.4.6
- JDK1.8.9
ハマったこと
クラスパスの記述方法
任意のクラスパスを読み込む。
今回はExcelを扱おうとしてるのでpoi等以下のような感じ。
Rjb::load("#{RAILS_ROOT}/lib/poi-3.5-FINAL-20090928.jar;#{RAILS_ROOT}/lib/poi-ooxml-3.5-FINAL-20090928.jar;#{RAILS_ROOT}/lib/ooxml-schemas-1.0.jar;#{RAILS_ROOT}/lib/poi-scratchpad-3.5-FINAL-20090928.jar;#{RAILS_ROOT}/lib/dom4j-1.6.1.jar;#{RAILS_ROOT}/lib/geronimo-stax-api_1.0_spec-1.0.jar;#{RAILS_ROOT}/lib/xmlbeans-2.3.0.jar", jvmargs=[])
複数の場合、Linuxの場合はコロン(:)、Windowsの場合はセミコロン(;)になる。
本番環境のセミコロンになっていて、正しく読み込まれていない状態だった。
(前任者の開発環境がウィンドウズだったのか?)
今まで正常に動いてたのが奇跡。
Rjb::load は一度まで
loadは「JVM インスタンスの作成」をしている模様。
(一度loadすると2回目は無効になる?)
なので、Railsサーバーの再起動も必要っぽい。