【发布时间】:2014-01-31 10:51:43
【问题描述】:
我正在尝试将 jruby 嵌入到 weblogic 应用程序中以运行 sass/compass,但没有运气;-( 这是迄今为止所做的:
-
安装 sass/compass GEMS:
java -jar jruby-complete-1.7.10.jar -S gem install -i . compass --no-rdoc --no-ri -
创建一个包含所有宝石的罐子
jar uf jruby-complete-1.7.10.jar -C sass-compass . -
检查新的 jruby-complete-1.7.10.jar 是否包含所有 gem:
java -jar jruby-complete-1.7.10.jar -S gem list *** LOCAL GEMS *** bouncy-castle-java (1.5.0147) chunky_png (1.2.9) compass (0.12.2) fssm (0.2.10) jruby-openssl (0.9.3) json (1.8.0 java) krypt (0.0.1) krypt-core (0.0.1 universal-java) krypt-provider-jdk (0.0.1) rake (10.1.0) rdoc (4.0.1) sass (3.2.14)
到目前为止,一切顺利,我确认我的新 uber jruby-complete-1.7.10.jar 包含 sass 和 compass gems
进入weblogic(Weblogic 11 - Oracle 10.3.6)
- 我创建了一个带有 servlet 的 WebApp,该 servlet 使用 JRuby 编译 sass/compass css 并将其放入 EAR 中
-
展开耳朵,结构如下:
MyEAR |-APP-INF | |-classes | |-lib | |-jruby-complete-1.7.10.jar <- my jruby jar that contains sass/compass gems |-META-INF |-MyWAR |-META-INF |-WEB-INF |-classes | |-MyServlet.class <- the servlet that compiles sass |-lib |-web.xml
当我调用 servlet 编译一些 sass/compass css 时,我收到以下错误:
LoadError: no such file to load -- sass/plugin
require at org/jruby/RubyKernel.java:1083
require at classpath:/META-INF/jruby.home/lib/ruby/shared/rubygems/core_ext/kernel_require.rb:55
(根)在 :2
为了编译我的 sass/compass 样式,我必须运行以下 ruby 脚本:
require 'rubygems'
require 'sass/plugin'
require 'sass/engine'
source = '...the scss code....'
engine = Sass::Engine.new(source,{ :syntax => :scss, :compass => {:css_dir => '/styles',:js_dir => '/scripts',images_dir => '/images'} })
result = engine.render
所以在我的 servlet 中,我使用 jruby 之类的:
ScriptingContainer rubyEngine = new ScriptingContainer(LocalContextScope.CONCURRENT);
String rubyScript = ...
final StringWriter rawScript = new StringWriter();
rawScript.append(rubyScript);
rubyScript.flush();
String compiledCSS = rubyEngine.runScriptlet(theScript)
.toString();
** 没有运气 ** 我得到了 LoadError: no such file to load -- sass/plugin
所以我尝试将 LOAD_PATH 设置为:
List<String> paths = new ArrayList<String>();
paths.add("classpath:/gems/sass-3.2.14/lib");
rubyEngine .setLoadPaths(paths);
** 也没有运气 **
¿有什么想法吗?
提前致谢
【问题讨论】:
-
你能不能试试
$LOAD_PATH(以及$GEM_HOME和/或$GEM_PATH)实际上在你的ruby脚本中照顾require 'rubygems'......也是.ear是否扩展(可能是访问 .ear 档案中的路径时出现问题)? -
谢谢@kares 我有一个“有趣”的时间试图让 sass/compass 在 weblogic 的嵌入式 jruby 下运行。最后,我设法让它启动并运行......我在答案中解释了解决方案,以便更好地记录