Sass-rails helpery "image-url", "asset-url" nie działają w rails 3.2.1

Jestem na 3.2.1, z SASS-rails-3.2.4 i sass-3.1.15...

Dokumentacja rurociągu aktywów mówi:

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

...

Więc zrobiłem następujący plik:

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

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

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

I kiedy odwiedzam localhost: 3000/assets/public / omg.css dostaję:

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

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

... Próbowałem również zmienić plik na omg.css.scss i zmienił składnię na:

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

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

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

Ale uzyskaj te same wyniki... czy ktoś wie, dlaczego ci pomocnicy nie działają?

Author: New Alexandria, 2012-02-16

9 answers

Pomimo tego, co mówi dokumentacja, wydaje się, że domyślne opcje w rails 3.2.6 pozwalają po prostu sprawić, że wszystko będzie działać z jeszcze mniejszą ilością informacji o ścieżkach w CSS. Np. ../app/assets/images/rails.png to odniesienia w twoim przykładzie.css.plik scss z czymś w rodzaju:

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

Nie włączasz image-url lub asset-url do swojego scss( z tego co wiem), po prostu url(your_image.png). Ta część dokumentacji wydaje się być tylko wyjaśnieniem tego, co robi w tle.

 33
Author: Jay H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-05 19:05:13

Kiedy napotkałem ten problem, to dlatego, że nie włączyłem pliku css do potoku zasobów do wstępnej kompilacji. W rezultacie zostanie on wygenerowany w czasie wykonywania. Ponieważ gem sass-rails jest powszechnie w grupie: assets, helpery są niedostępne podczas generowania plików css w czasie wykonywania.

Spróbuj dodać następujący wiersz do aplikacji.rb (lub produkcja."rb"): {]}

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

Znalazłem poprawkę na w tym poście w tym temacie znalazłem informację o nazwaniu plików podczas ich dodawania do precompilera.

 11
Author: Forrest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-12 14:44:18

Jeśli w przeszłości aktualizowałeś swoją aplikację do Rails 3.1, upewnij się, że zmieniłeś swoją aplikację.plik rb z

# 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)

Do

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
Railscast jest dostępny w wersji 3.1 oraz w wersji 3.1, a także w wersji 3.1.

Aktualizacja: Rails 4 wraca do starego sposobu robienia tego. Dzięki Aaron Gray !

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)
 6
Author: Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-03 18:55:19

Czy włączyłeś potoki aktywów w application.rb?

config.assets.enabled = true

Dobrze zrobiłeś, ustawiając rozszerzenie w arkuszach stylów Sass na .css.scss. To pozwala Rails wiedzieć, aby najpierw przeanalizować plik za pomocą Sass, zanim wyemituje zawartość jako CSS.

 4
Author: Brandan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-16 02:39:55

Możesz spróbować wyczyścić /tmp / cache. Jestem zbyt nowy w Rails i Sass, aby wiedzieć, dlaczego to działało, ale to rozwiązało ten sam problem dla mnie Po godzinach poszukiwań.

BTW, to działało pomimo tego, że widziałem inne dyrektywy Sass, takie jak ustawianie zmiennych i obliczanie z nimi, są wykonywane. Jestem pewien, że istnieje bardzo proste wyjaśnienie, gdy tylko będę miał czas, aby je wyśledzić.

 1
Author: kburke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-10 17:32:40

Dokonałem zmiany zaproponowanej przez @ Ryan, a także ulepszyłem sass-rails:

bundle update sass-rails

Sass 3.2.6 zadziałał dla mnie, podczas gdy 3.2.5 nie.

 1
Author: Steve,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-01 16:52:55

Po prostu mieliśmy ten sam problem i naprawiliśmy go, wyraźnie wymagając zębatek w Gemfile (nawet jeśli jest to zależność ActionPack):

group :assets do
  gem 'sprockets'
  gem 'sass-rails', '~> 3.2.3'
  # ...
end
Nie wiem dlaczego, ale teraz działa. ;-)
 0
Author: iGEL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-11 09:13:42

Walę się o to od kilku dni. Jedyne rozwiązanie, które działało dla mnie było następujące:

  1. Upewnij się, że sass-rails to your: development group w Twoim Gemfile.
  2. Jeśli to tego nie naprawi, Dodaj następujący plik do nowego pliku w config/ initializers / o nazwie coś w stylu "horrible_sass_patch.rb": {]}

    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
    

Uwaga: Wymaga to użycia "aktywnego" mechanizmu ładowania Bundlera, czyli Twojej aplikacji.rb wykorzystuje "po": {]}

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

... jeśli arkusze stylów znajdują się w programie vendor, upewnij się, że są zawarte w konfiguracji Sass:

if config.respond_to? :sass
  config.sass.load_paths << Rails.root.join('vendor', 'assets', 'stylesheets')
end
 0
Author: user208769,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-02 19:17:09

Możesz po prostu dodać końcowy ukośnik / do ścieżki i użyć url Jak zwykle.

backgound-image: url("/assets/rails.png")
 0
Author: user3284463,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-10 11:33:54