2014-01-31 28 views
0

我試圖嵌入的JRuby在WebLogic應用沒有運氣運行SASS /指南針;-( 這是搞什麼名堂完成至今:使用內嵌GEMS Weblogic上

  1. 安裝SASS /指南針GEMS:

    java -jar jruby-complete-1.7.10.jar -S gem install -i . compass --no-rdoc --no-ri 
    
  2. 創建一個包含所有的寶石罐子

    jar uf jruby-complete-1.7.10.jar -C sass-compass . 
    
  3. 檢查新JRuby的完整-1.7.10.jar包含了所有的寶石:

    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) 
    

到目前爲止,一切都很好,我確認我的新超級JRuby的完整,1.7.10.jar包含青菜和指南針寶石

進入weblogic的(Weblogic的11 - 甲骨文10.3.6)

  1. 我創建了一個Web應用程序與使用JRuby的編譯SASS /指南針CSS,並把它在EAR內,一個servlet
  2. 部署耳朵所以結構是這樣的:

    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編譯一些青菜/指南針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 

(根) at: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:沒有這樣的文件來加載 - 青菜/插件

於是,我就設置在LOAD_PATH這樣的:

List<String> paths = new ArrayList<String>(); 
paths.add("classpath:/gems/sass-3.2.14/lib"); 
rubyEngine .setLoadPaths(paths); 

**沒有運氣,無論是**

¿什麼想法?

在此先感謝

+1

可能你也許嘗試運行SASS /指南針時,一個問題是什麼'$ LOAD_PATH'(以及'$ GEM_HOME '和/或'$ GEM_PATH')實際上會在你的ruby腳本中查看'require'rubygems'' ...也是.ear得到擴展與否(可能是在.ear歸檔中訪問路徑的問題)? – kares

+0

謝謝@kares我有一個「有趣」的時間試圖讓sass /指南針在weblogic的嵌入式jruby下運行。 最後,我設法啓動並運行了...我在答案中解釋瞭解決方案,以便更好地記錄 – futuretelematics

回答

0

該解決方案爲湯姆的線索說的是把在上海社會科學院LOAD_PATH /指南針寶石路。

所以腳本使sass/compass運行在weblogic 10.3下。6:

sassGemDir = 'D:/compass-gems/gems/sass-3.2.13/lib' 
compassGemDir = 'D:/compass-gems/gems/compass-0.12.2/lib' 
chunkyPngGemDir = 'D:/compass-gems/gems/chunky_png-1.2.9/lib' 
fssmGemDir = 'D:/compass-gems/gems/fssm-0.2.10/lib' 
$LOAD_PATH.insert(0,sassGemDir,remoteSassGemDir,compassGemDir,chunkyPngGemDir,fssmGemDir) 

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 

注:

最後我沒有成功地從一個JAR讓JRuby的負載SASS /指南針,所以沒有必要創建一個超級-JAR包含JRuby的完整, SASS /羅盤(步驟2在我的問題)

在紅寶石腳本唯一的變化從一個JAR運行SASS /羅盤是:

sassGemDir = 'classpath:/gems/sass-3.2.13/lib' 
compassGemDir = 'classpath/compass-0.12.2/lib' 
chunkyPngGemDir = 'classpath/gems/chunky_png-1.2.9/lib' 
fssmGemDir = 'classpath/gems/fssm-0.2.10/lib' 

但是當我從尤伯杯罐子運行SASS /指南針裝載我有兩個錯誤:

  1. 羅盤的精靈importer.rb加載失敗sprite_importer.erb文件,因爲它加載,如:

    TEMPLATE_FOLDER = File.join(File.expand_path('../', __FILE__), 'sprite_importer') 
    

    ,所以我改變精靈importer.rb到:

    TEMPLATE_FOLDER = File.join(File.expand_path(File.join(File.dirname(__FILE__))),'sprite_importer') 
    

    這個問題就走了

  2. 指南針的frameworks.rb無法加載框架dir:當目錄位於JAR中時,jruby無法加載目錄的內容(我認爲它是java 6或jrockit的錯誤,這是我在weblogic 10.3.6中使用的JDK )

    我無法找到一個解決這個問題,所以我切換到加載SASS /指南針是從文件系統從一個JAR文件中直接加載,並且不

最後要注意 所有GEM LOAD_PATH和羅盤從JAR w中加載的問題ERE不是Java 7下內TOMCAT運行

希望這可以幫助別人誰在試圖使用嵌入式的JRuby