Помощники нахмель
-
25-10-2019 - |
Вопрос
Я нахожусь на 3.2.1, с нахальными районами-3.2.4 и Sass-3.1.15 ...
В документации для конвейера активов говорится:
asset-url("rails.png", image) becomes url(/assets/rails.png)
image-url("rails.png") becomes url(/assets/rails.png)
...
Итак, я сделал следующий файл:
# app/assets/stylesheets/public/omg.css.sass
body
background: asset-url('snake.gif', image)
#lol
background: image-url('snake.gif')
И когда я посещаю LocalHost: 3000/Assets/Public/OMG.CSS, я получаю:
body {
background: asset-url("snake.gif", image); }
#lol {
background: image-url("snake.gif"); }
... Я также попытался изменить файл на OMG.css.scss и изменил синтаксис на:
# app/assets/stylesheets/public/omg.css.scss
body {
background: asset-url('snake.gif', image);
}
#lol {
background: image-url('snake.gif');
}
Но получить те же результаты ... кто -нибудь имеет какую -либо представление, почему эти помощники не работают?
Решение
Несмотря на то, что говорится в документации, кажется, что варианты по умолчанию в Rails 3.2.6 позволяют вам просто заставить вещи работать с еще меньшей информацией о пути в вашем CSS. Например ../app/assets/images/rails.png
Является ли ссылки в вашем примере.
background: white url(rails.png) repeat-y;
Вы не включаете image-url
или же asset-url
в твоих СКС (насколько я знаю), просто просто url(your_image.png)
. Анкет Эта часть документации, по -видимому, является просто объяснением того, что он делает на заднем плане.
Другие советы
Когда я столкнулся с этой проблемой, это было потому, что я не включил файл CSS в конвейер активов для предварительной компиляции. В результате он будет генерироваться во время выполнения. Поскольку драгоценный камень нахальных районов обычно находится в группе: помощники недоступны при генерации файлов CSS во время выполнения.
Попробуйте добавить следующую строку в ваше Application.rb (или Production.rb):
config.assets.precompile += %w( public/omg.css )
Я нашел исправление на эта почта Включая Gotcha вокруг названия файлов при добавлении их в Precompiler.
Если вы обновили свое приложение до Rails 3.1 в прошлом, убедитесь, что вы изменили свой файл Application.rb с
# 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)
к
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 При обновлении до Rails 3.1 и добавление конвейера активов.
Обновлять: Rails 4 возвращается к старому способу сделать это. Спасибо Аарон Грей!
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)
Вы включили конвейер активов в application.rb
?
config.assets.enabled = true
Вы сделали правильно, установив расширение на таблицах нахальных стилей на .css.scss
. Анкет Это дает Rails знать, чтобы проанализировать файл сначала с SASS, прежде чем он издает контент как CSS.
Вы можете попробовать очистить /tmp /cache. Я слишком новичок в Rails и Sass, чтобы знать, почему это сработало, но это решило для меня ту же проблему после нескольких часов поиска.
Кстати, это сработало, несмотря на то, что я мог видеть другие директивы SASS, такие как установка переменных и расчеты с ними, выполнять. Я уверен, что есть очень простое объяснение, когда у меня будет время отследить его.
Я сделал изменения, предложенные @ryan, а также обновляя нахлы
bundle update sass-rails
Sass 3.2.6 работал для меня, а 3.2.5 - нет.
У нас только что была та же проблема, и она исправила ее, явно требуя звездочек в Gemfile (даже если это зависимость от ActionPack):
group :assets do
gem 'sprockets'
gem 'sass-rails', '~> 3.2.3'
# ...
end
Я не знаю почему, но сейчас это работает. ;-)
Я стучал головой по этому поводу в течение нескольких дней. Единственное решение, которое сработало для меня, было следующим образом:
- Убедитесь, что нахальщики в своей группе разработки в вашем Gemfile.
Если это не исправлено, добавьте следующее в новый файл в Config/ инициализаторах/ назвал что -то вроде "Horrifle_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
Примечание. Это требует, чтобы вы использовали «активный» механизм загрузки пучка, то есть ваше приложение. RB использует следующее:
Bundler.require *Rails.groups(:assets => %w(development test))
... и если ваши таблицы стилей находятся в поставщике, убедитесь, что они включены в конфигурацию SASS:
if config.respond_to? :sass
config.sass.load_paths << Rails.root.join('vendor', 'assets', 'stylesheets')
end
Вы можете просто добавить спередие вперед /
на путь и использование url
Как ты обычно делаешь.
background-image: url("/assets/rails.png")