Jruby试图加载当地的红宝石而不是包装的宝石



我在我的 jruby jar 中看到一个奇怪的问题,我确定这是由于某些配置造成的,但我不太清楚是什么。我看到的行为是,当我的 jruby 罐子去装载宝石时,它会在我的本地红宝石环境中而不是罐子本身内寻找它。如果我将我的罐子移到没有红宝石环境的系统中,那么它会使用罐子中包装的宝石。

这是我的启动 rb 文件。

require 'rubygems'
app_jar_root = File.expand_path(File.join(File.dirname(__FILE__), ".."))
Dir["#{app_jar_root}/Project/**/*/"].each do |foldername|
$LOAD_PATH.unshift foldername[-1] == '/' ? foldername[0..-2] : foldername
end

# All support libraries required to be included
[
'java',
'yaml'
].each do |require_name|
require require_name
end
# All java imported namespaces
[
# 'java.sql.DriverManager'
].each do |namespace|
java_import namespace
end
# base app directory requires
Dir["#{app_jar_root}/Project/app/**/*.rb"].reject do |filename|
%w|file_to_exclude1.rb file_to_exclude2|.include? File.basename(filename)
end.each do |filename|
require File.basename(filename)
end
# Debugger.start

如果这有任何用处,我也可以发布我的 warble.rb,但我假设问题是 boot.rb 中的一些配置。

事实证明,问题是我的 jruby jar 引用了本地GEM_PATHGEM_HOME变量(如果它们存在于系统上)。为了解决这个问题,我不得不通过在boot.rb文件中重新分配变量来重定向变量以指向 jar 内部。

这是我如何实现此目的的示例,其中app_jar_root是 jar 中应用程序文件夹的根目录。

ENV['GEM_HOME'] = "#{app_jar_root}/gems"
ENV['GEM_PATH'] = "#{app_jar_root}/gems"

相关内容

  • 没有找到相关文章

最新更新