我在我的犹豫不决的罐子里看到一个奇怪的问题,我确定它是由于一些配置,但我无法弄清楚是什么。我所看到的行为是当我的jruby jar加载一个宝石时,它在我当地的红宝石环境中寻找它而不是在罐子里面。如果我将我的罐子移动到没有红宝石环境的系统,那么它会使用包装在罐子里的宝石。
这是我的启动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中的一些配置。
答案 0 :(得分:0)
原来问题是我的jruby jar引用了本地GEM_PATH
和GEM_HOME
变量(如果它们存在于系统中)。要解决这个问题,我必须通过在boot.rb
文件中重新分配变量来将变量重定向到jar内部。
以下是我如何实现此目标的示例,其中app_jar_root
是jar中app文件夹的根目录。
ENV['GEM_HOME'] = "#{app_jar_root}/gems"
ENV['GEM_PATH'] = "#{app_jar_root}/gems"