2016-06-23 26 views
1

Ich sehe ein seltsames Problem in meinem jruby Glas und ich bin sicher, dass es aufgrund einiger Konfiguration ist, aber ich kann nicht ganz herausfinden, was. Das Verhalten, das ich sehe, ist, wenn mein jruby-Krug einen Edelstein lädt, sucht es in meiner lokalen Ruby-Umgebung statt in dem Krug selbst. Wenn ich mein Glas zu einem System ohne Ruby-Umgebung bewege, dann benutzt es die Edelsteine, die im Glas verpackt sind.Jruby versucht, lokale Ruby Edelsteine ​​anstelle von verpackten

Hier ist meine Boot-RB-Datei.

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 

ich auch meine warble.rb veröffentlichen können, wenn diese von Nutzen sein würde, aber ich die Frage gehe davon einige Konfiguration in boot.rb.

Antwort

0

Es stellte sich heraus, dass mein Jruby-Jar die lokalen Variablen GEM_PATH und GEM_HOME referenzierte, wenn sie auf einem System vorhanden waren. Um dies zu beheben, musste ich die Variablen so umlenken, dass sie in das JAR hineinzeigten, indem sie in der Datei boot.rb neu zugewiesen wurden.

Hier ist ein Beispiel, wie ich das erreicht habe, wo app_jar_root die Wurzel des App-Ordners im Jar ist.

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