1

require 'susy'なぜjrubyは私のコンパスconfig.rbで見つけることができます@import 'susy'が、*。scssファイル内で問題が発生します:

 [java]     error Web Content/common/sass/base/foundation_de_DE.scss (Line 9: File to import not found or unreadable: susy.
        [java] Load paths:
        [java]   <removed>/Web Content/common/sass

私の既存のアプリケーションは、フロントエンドでレスポンシブデザインの使用を開始したいと考えています。ただし、すべての開発者のマシン、統合環境、パフォーマンス環境、および本番環境にruby / compassをインストールすると、イニシアチブが失われます。

この質問とこの簡略化されたチュートリアルに従って、現在のAnt build.xmlを使用して、jRubyを使用していくつかのターゲットを作成しました。

どこにでもrubyをインストールする必要がないようにするためのjarトリックのgems :最新のjrubyごとにダウンロードされたjruby-complete-1.6.8.jarには、2013.03.20の時点で相対パスの問題があります

java -jar jruby-complete-1.6.8.jar -S gem install -i ./susy susy  
jar uf jruby-complete-1.6.8.jar -C susy .  
java -jar jruby-complete-1.6.8.jar -S gem list

ビルドプロセス中に使用されるantターゲット:

 <target name="compass.compile">
     <java classname="org.jruby.Main" fork="true" failonerror="true" classpathref="jruby.classpath">  
                <arg line="${basedir}/compile.rb ${basedir} compile ${basedir}"/>   
            </java>
     </target>

ユーザーがscssファイルを保存するときに「自動コンパイル」するためにEclipseベースのIDEによって使用されるantターゲット。 Eclipseの「自動ビルド」scssファイルを作成する手順(ステップ5から開始)

<target name="compass.dev">
        <path id="jruby.classpath">
            <fileset dir="../../../release/lib/arch/jruby">
                <include name="jruby-complete.jar"/>
            </fileset>            
        </path>
        <java classname="org.jruby.Main" fork="true" failonerror="true" classpathref="jruby.classpath">  
            <arg line="${basedir}/compile.rb ${basedir} compile ${basedir}"/>  
        </java>
    </target>

最後に、antターゲットが使用する「compile.rb」は次のとおりです。

Dir.entries(ARGV[0]).each do |lib|  
    $LOAD_PATH.unshift "#{ARGV[0]}/#{lib}/lib"  
end

require 'rubygems'
require 'compass' 
require 'susy'
require 'compass/exec'  

exit Compass::Exec::SubCommandUI.new([ARGV[1], ARGV[2], "-q"]).run!

およびコンパスで使用されるconfig.rb:

 # Require any additional compass plugins here.  
# Set this to the root of your project when deployed:
require 'susy'

http_path = "./Web Content/"  
css_dir = "./Web Content/common/sass-output-css/"  
sass_dir = "./Web Content/common/sass/"
add_import_path  "./Web Content/sass"  
images_dir = "./Web Content/common/images/"  
javascripts_dir = "./Web Content/common/js/widgets"  
# To enable relative paths to assets via compass helper functions. Uncomment:  
#relative_assets = true  

そして最後に、scssファイルでsusyを使おうとしています。

@import 'reset'; 
@import 'utilities';
@import 'baseColorVariables'; 
@import 'font';  
@import 'susy'; 


$total-columns: 12; 
$column-width: 4em; 
$gutter-width: 1em; 
$grid-padding: 1em;
.magic-container { @include container; } 
4

1 に答える 1

1

2013.03.20の時点で更新され、これは機能します。しかし、それは「ルビーレス」マシンでスージー/コンパスを取得するための最もクリーンな方法ではないかもしれません。誰かがもっときれいなものを持っていますか?

それを見つけた。コンパスはsassロードパスにありません。また、「瓶の中の宝石」jrubyソリューションの下で実行している間は実際にはスージーではありません。ヘニング・ピーターセン、そしてあなたの投稿
に感謝します :

JRubyは、Rubyのすべてのファイルベースの方法から非常に優れた抽象化を備えているため、JARにパッケージ化されたときにほとんどのものが機能し続けます。JAR内のファイルには、おおよそ次のようなパスがあります:/path/to/jar/gems.jar!file/in/jar/script.rb。JRubyは、JARを使用するときに相対ファイルとすべてを機能させ続けますが、JARファイル内のディレクトリリストのようなことを行う方法はありません。そうです、ディレクトリリストを読み取るすべてのものが壊れています。

コンパスのframeworks.rb(ファンではない)を変更したので、ディレクトリリストの呼び出しに失敗しても、コンパスが自分自身をsassロードパスにロードするのを停止しません。

Compass::Frameworks.discover(:defaults)
Compass::Frameworks.register_directory(File.join(Compass.base_directory, 'frameworks/compass'))
Compass::Frameworks.register_directory(File.join(Compass.base_directory, 'frameworks/blueprint'))

これにより、*。scss自動コンパイル要求が次のように変更されます。

Syntax error: File to import not found or unreadable: susy.
              Load paths:
                <removed>/Web Content/common/sass
                file:<removed>/release/lib/arch/jruby/jruby-complete.jar!/gems/compass-0.12.2/frameworks/compass/stylesheets
                file:<removed>/release/lib/arch/jruby/jruby-complete.jar!/gems/compass-0.12.2/frameworks/blueprint/stylesheets

さて、ロードパスにスージーを入れる必要があります。この行をコンパスに追加config.rbしても機能しませんが、機能することを望みます。add_import_path "../../../release/lib/arch/jruby/jruby-complete.jar!gems/susy-1.0.7/sass"

Henning Petersenもこれをキャッチしました。これも、jrubyjarが 変更されたコンパスconfiguration/adapters.rbとSassを使用したディレクトリリスト呼び出しが原因でしたimporters/filesystem.rb。これらすべてのファイルを変更することは、私が満足しているよりも維持するのが面倒であり、コンパス&&sassに関する投稿はすでに古くなっています。

そこで、sassディレクトリをjarから取り出しました。これにより、コンパスadd_import_pathが意図したとおりに機能するようになりました。私がこれまでに持っている最もクリーンな解決策は、手動でgem/compass-0.12.2/lib/frameworks.rb:に追加することです。

Compass::Frameworks.register_directory(File.join(Compass.base_directory, 'frameworks/compass'))
Compass::Frameworks.register_directory(File.join(Compass.base_directory, 'frameworks/blueprint'))

次に、この行をコンパスプロジェクトのconfig.rbに追加します(ファイル全体が提供されます)。

 # Require any additional compass plugins here.  
# Set this to the root of your project when deployed:
require 'susy'

http_path = "./Web Content/"  
css_dir = "./Web Content/common/sass-output-css/"  
sass_dir = "./Web Content/common/sass/"
add_import_path  "./Web Content/susy-1.0.7-read-only"  
images_dir = "./Web Content/common/images/"  
javascripts_dir = "./Web Content/common/js/widgets"  
# To enable relative paths to assets via compass helper functions. Uncomment:  
#relative_assets = true  

これにより、RAD / eclipseBuilderscssがantターゲットを自動コンパイルして吐き出しました。

compass.dev:
BUILD SUCCESSFUL
Total time: 16 seconds
于 2013-03-21T15:03:12.647 に答える