3

私は zurb-foundation のスタイルシートを使用する Rails エンジンを構築していましたが、同じ Sass::Syntax エラーが発生し続けました。Railsアプリケーションで同じ手順を実行したことがあり、最初の試行で機能したため、これは奇妙に思えました。そこで、2 つの新しい Rails プロジェクト (1 つのアプリケーションと 1 つのエンジン) を開始して、最小限のセットアップで Foundation を使用するように構成することで、この問題に焦点を合わせることにしました。

私は 2 つのクリーンな Rails 3.2.9 プロジェクト (1 つのアプリケーションと 1 つ) から始めてengine --full、foundation_and_overrides.scss を追加requireし、CSS マニフェストでそれを -ing することで、両方を基盤用に手動で構成しました。

次に、必要最小限のコントローラーを作成して、ページを読み込むようにしました。アプリケーションについては、そのページを読み込んでページのソースを見ると、基礎となる CSS が正しくコンパイルされ、読み込まれていることがわかります。

エンジンに対して同じことを試したところ、次のエラーが発生しました。

Sass::SyntaxError in Main#index

Showing /<PLUGIN_PATH>/test/dummy/app/views/layouts/application.html.erb where line #5 raised:

File to import not found or unreadable: foundation/common/ratios.
Load path: /<PLUGIN_PATH>/test/dummy
  (in /<PLUGIN_PATH>/app/assets/stylesheets/example_plugin/foundation_and_overrides.scss)

(ダミーアプリの CSS マニフェストはrequire、プラグインの CSS マニフェスト (foundation_and_overrides.scss である) を使用していることに注意してくださいrequire。エラーはfoundation_and_overrides.scss から発生しているため、配線は明らかに問題ではありません)

Ruby-1.9.3 のいくつかのビルド (p125、194、p327 だと思います) でこれを試してみましたが、結果は同じでした。

次の行を test/dummy/config/application.rb に追加しても、まだ機能しませんでした:

config.assets.paths << "#{Foundation::Engine.root}/scss"

そのパスにfoundation/common/_ratios.scssが存在しますが。

問題は、Sass、Sprockets、Compass、Foundation、または Rails にある可能性があるため、ここからどこに行くべきかわかりません。

私はこれを Foundation の問題として報告しましたが、それについてはあまり確信が持てません。

誰もこれを見たことがありますか?

4

2 に答える 2

5

このStackoverflowの質問で答えを見つけました

問題は、Rails エンジンのダミー アプリと通常の Rails アプリの config/application.rb ファイルがわずかに異なることです。

Rails アプリでは、このコードが上部に表示されます。

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

しかし、エンジン ダミー アプリでは、代わりに次のように表示されます。

Bundler.require
require "<PLUGIN_NAME>"

Rails アプリでは、最初の Bundler.require に Gemfile のすべてのグループが含まれますが、Rails.env が :development または :test でない限り、:assets は除外されます。2 番目の Bundler.require には :default が含まれます。グループ -- :assets および :production、:development または :test のいずれか

ダミー アプリでは、1) 運用環境での使用を意図していないため、これは必要ありません。2) 通常、テストと開発には同様の依存関係要件があります。:assets グループは依存関係を :test と :development に適用するのに便利な方法であり、:production には適用しないため、ダミー アプリでは :default と同じです。したがって、ダミーアプリでは、:default だけが必要です。Bundler.requireは (警告: ネタバレ注意) と同じなので、Bundler.require(:default)ダミー アプリは を使用するだけBundler.requireです。これは、Gemfile 内のグループ内のものはすべて無視されることを意味します。

だから私が抱えていた問題は、RailsアプリのGemfileからRailsのダミーアプリのGemfileにコピーアンドペーストしていたことでしたgroup :assets do.... 行を削除するgroupと、すべてが機能しました!

11/29 の後半に追加:

明確にするために、私が見たエラーは、sass-rails が含まれていなかったため (Gemfile の :assets グループにあったため)、アセットが Sass として解析される代わりに、CSS として解析されたためです。@importSass とは CSS とは異なる意味を持っているため、CSS ファイルを解析していたものが何であれ、異なる実装を使用していた@importため、ファイルを見つけることができませんでした。

于 2012-11-29T17:12:31.067 に答える
0

こんにちは、私はこの問題を解決しました。解決方法を見つけるのに 5 時間ほどかかりました (私の英語で申し訳ありませんが、私の母国語ではありません)。

Rails での Foundation の通常のインストールは、私のエンジンでは機能しなかったため、手動で行いました。

次の行を application.html.erb に追加しました。 <meta name="viewport" content="width=device-width, initial-scale=1.0>

次の行を your_engine/app/assets/javascripts/your_engine_name/application.js に追加します。 //= require foundation

そして、これが私がそれを解決した方法です:

次の行を your_engine/app/assets/stylesheets/your_engine_name/application.css に追加します (注: 名前を application.scss に変更しませんでした): *= require your_engine_name/foundation_and_overrides

また:

開発については、Gemfile でコメントされている行で、次のように述べています# あなたの宝石を ruby​​gems.org にリリースする前に、gemspec を確認してください。" だから私は必要な宝石を追加します(財団、サス、コンパスなど)

これですべてです。これが私のエンジンを Foundation で動作させる方法です。

于 2012-12-13T05:24:22.043 に答える