Frage

Ich bin auf 3.2.1, mit Sass-Rails-3.2.4 und SASS-3.1.15 ...

In der Dokumentation für die Asset -Pipeline heißt es:

asset-url("rails.png", image) becomes url(/assets/rails.png)
image-url("rails.png") becomes url(/assets/rails.png)

...

Also habe ich die folgende Datei erstellt:

# app/assets/stylesheets/public/omg.css.sass

body
  background: asset-url('snake.gif', image)

#lol
  background: image-url('snake.gif')

Und wenn ich Localhost besuche: 3000/assets/public/omg.css, bekomme ich:

body {
  background: asset-url("snake.gif", image); }

#lol {
  background: image-url("snake.gif"); }

... Ich habe auch versucht, die Datei in omg.csss.scss zu ändern und die Syntax auf:

# app/assets/stylesheets/public/omg.css.scss

body {
  background: asset-url('snake.gif', image);
}

#lol {
  background: image-url('snake.gif');
}

Aber erhalten Sie die gleichen Ergebnisse ... Hat jemand eine Idee, warum diese Helfer nicht funktionieren?

War es hilfreich?

Lösung

Trotz der Dokumentation scheint die Standardoptionen in Rails 3.2.6 zu ermöglichen, dass Sie die Dinge einfach mit noch weniger Pfadinformationen in Ihrem CSS funktionieren lassen. Z.B ../app/assets/images/rails.png Es ist Referenzen in Ihrem Beispiel.css.scss -Datei mit so etwas wie:

background: white url(rails.png) repeat-y;

Sie schließen die nicht ein image-url oder asset-url in dein SCSS (soweit ich weiß), einfach nur einfach url(your_image.png). Diese Dokumentation scheint nur eine Erklärung zu sein, was es im Hintergrund tut.

Andere Tipps

Wenn ich dieses Problem traf, hatte ich die CSS-Datei nicht in die Asset-Pipeline zur Vorkompilierung aufgenommen. Infolgedessen würde es zur Laufzeit generiert. Da sich das Juwel von Sass-Rails in der Gruppe der Vermögenswerte häufig befindet, sind die Helfer beim Generieren von CSS-Dateien zur Laufzeit nicht verfügbar.

Versuchen Sie, Ihre Anwendung (oder Produktion.RB) der folgenden Zeile hinzuzufügen:

config.assets.precompile += %w( public/omg.css )

Ich fand die Lösung auf dieser Beitrag Einschließlich einer Gotcha, in der die Dateien beim Hinzufügen zum Präkompiler benannt werden.

Wenn Sie Ihre App in der Vergangenheit auf Rails 3.1 aktualisiert haben, stellen Sie sicher, dass Sie Ihre Anwendung.RB -Datei aus geändert haben.

# If you have a Gemfile, require the gems listed there, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env) if defined?(Bundler)

zu

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

Sehen Dieser Railscast Beim Upgrade auf Rails 3.1 und Hinzufügen der Asset -Pipeline.

Aktualisieren: Rails 4 geht auf die alte Art zurück, es zu tun. Vielen Dank Aaron Gray!

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)

Haben Sie die Asset -Pipeline in aktiviert application.rb?

config.assets.enabled = true

Sie haben richtig gemacht, indem Sie die Erweiterung auf Ihren Sass -Stylesheets festgelegt haben .css.scss. Dadurch können Rails die Datei zuerst mit SASS analysieren, bevor sie den Inhalt als CSS ausgibt.

Vielleicht möchten Sie Löschen /TMP /Cache versuchen. Ich bin zu neu in Rails und Sass, um zu wissen, warum dies funktioniert hat, aber es löste das gleiche Problem für mich nach Stunden der Suche.

Übrigens, dies funktionierte trotz der Tatsache, dass ich andere SASS -Richtlinien sehen konnte, z. B. Variablen und Berechnung mit ihnen, ausgeführt wurden. Ich bin sicher, es gibt eine sehr einfache Erklärung, sobald ich Zeit habe, sie aufzuspüren.

Ich habe die von @ryan vorgeschlagene Änderung vorgenommen und Sass-Rails aufgerüstet:

bundle update sass-rails

Sass 3.2.6 hat für mich gearbeitet, während 3.2.5 nicht.

Wir hatten einfach das gleiche Problem und behoben es, indem wir ausdrücklich Kettenräder in der GemFile benötigten (obwohl es sich um eine Abhängigkeit von ActionPack handelt):

group :assets do
  gem 'sprockets'
  gem 'sass-rails', '~> 3.2.3'
  # ...
end

Ich weiß nicht warum, aber es funktioniert jetzt. ;-)

Ich habe seit Tagen meinen Kopf dagegen geschlagen. Die einzige Lösung, die für mich funktioniert hat, war wie folgt:

  1. Stellen Sie sicher, dass Sass-Rails an Ihre: Entwicklungsgruppe in Ihrer GemFile.
  2. Wenn das nicht repariert wird, fügen Sie Folgendes in eine neue Datei in config/ Initializer/ genannt "Horrible_Sass_Patch.rb" hinzu:

    begin
      require 'sass-rails'
    rescue
    end
    
    if Class.const_defined? "Sass::Script::Functions"
      module Sass::Script::Functions
        # This function exists, but doesn't automatically register
        declare :asset_url, [:value]
        declare :image_url, [:value]
        declare :font_url, [:value]
        # ... etc
      end
    end
    

Hinweis: Dies erfordert, dass Sie den "aktiven" Bundler -Lademechanismus verwenden, dh Ihre Anwendung.RB verwendet Folgendes:

Bundler.require *Rails.groups(:assets => %w(development test))

... Und wenn Ihre Stylesheets im Anbieter sind, stellen Sie sicher, dass sie in der Konfiguration von Sass enthalten sind:

if config.respond_to? :sass
  config.sass.load_paths << Rails.root.join('vendor', 'assets', 'stylesheets')
end

Sie können einfach einen nach vorne vorwärts gerichteten Schrägstrich hinzufügen / zum Pfad und verwenden url wie du es normalerweise tust.

background-image: url("/assets/rails.png")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top