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ą?
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.
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.
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)
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.
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ć.
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.
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. ;-)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:
- Upewnij się, że sass-rails to your: development group w Twoim Gemfile.
-
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
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")
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