Вопрос

Я нахожусь на 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

Я не знаю почему, но сейчас это работает. ;-)

Я стучал головой по этому поводу в течение нескольких дней. Единственное решение, которое сработало для меня, было следующим образом:

  1. Убедитесь, что нахальщики в своей группе разработки в вашем Gemfile.
  2. Если это не исправлено, добавьте следующее в новый файл в 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")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top