Фоновое изображение не отображается в Rails 3.1. - PullRequest
1 голос
/ 30 августа 2011

У меня проблема с фоновыми изображениями, которые не отображаются в производственном режиме в приложении Rails 3.1 (3.1.0.rc8). Я также использую звездочки 2.0.0 и пассажирские 3.0.8.

Моя таблица стилей - .scss и использует image_tag ('...') в разделе фона. При развертывании я прекомпилирую ресурсы.

Мой рабочий сервер использует Apache2 с Passenger, а приложение развернуто в подчиненном URI. Виртуальный хост определяется как:

ServerName wibble
DocumentRoot /srv/www
...
RailsBaseURI /myapp
<Directory /srv/www/myapp>
    Options -MultiViews
</Directory>

Приложение фактически развернуто в / srv / Applications / myapp, и я создал символическую ссылку с / srv / www / myapp на /srv/applications/myapp/current/public.

Таблица стилей обслуживается правильно, но когда я проверяю элемент на наличие логотипа, он выглядит так:

url("http://wibble/assets/logo-xxx.png")

целое из:

url("http://wibble/myapp/assets/logo-xxx.png")

На самом деле, если я изменю URL-адрес, как описано выше, используя объявление редактирования в Opera, логотип будет отображаться правильно. Это говорит мне о том, что я правильно ссылаюсь на изображение, и оно правильно прекомпилируется. С таблицей стилей все в порядке, поэтому я также правильно подбираю ресурсы. Просто кажется, что RailsBaseURI пропускает путь URL.

Я попробовал все виды в таблице стилей - используя .erb, asset_path, /myapp/logo.png, myapp / logo.png - и ничего не работает. Все отлично работает в режиме разработки с тонким сервером.

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 03 сентября 2011

Если я разверну в подчиненном URI, я нашел только один способ, который будет работать для ссылки на изображение из файла CSS в конвейере ресурсов.Поэтому, если у меня есть следующий CSS в конвейере ресурсов:

div{background: transparent url('../images/logo.png') no-repeat top left;}

Затем поместите изображение в public / images / logo.png.При попытке использовать помощник SCSS image_url всегда хочется поместить ресурсы в корень ("/ assets").

Помещение изображения в старое место в рамках общественных работ, но при этом файл logo.png вынимается из конвейера ресурсов, где ему не дается дайджест, для правильного истечения срока его действия.

1 голос
/ 10 сентября 2011

Наконец-то у меня есть пара решений.

1) С https://github.com/rails/sass-rails/issues/17 похоже, что это можно исправить в sass-rails. В то же время я разобрал по обезьяне helpers.rb в соответствии с предложенным патчем по ссылке выше. Я просто устанавливаю необходимую переменную среды в строке прекомпиляции ресурса в deploy.rb.

Я делаю все свои обезьяньи патчи в одном файле config/initializers/gem_patches.rb. В этом файле я пропатчил этот метод как:

module Sass
  module Rails
    module Helpers
      protected
      def public_path(asset, kind)
        path = options[:custom][:resolver].public_path(asset, kind.pluralize)
        path = ENV['PRODUCTION_URI'] + path if ENV['PRODUCTION_URI']
        path
      end
    end
  end
end

2) В качестве альтернативы, если можно встраивать изображения в CSS, изменение таблицы стилей на расширение .erb и замена image-url('logo.png') на url(<%= asset_data_uri 'logo.png' %>) будет работать без необходимости изменения sass-rails.

0 голосов
/ 02 сентября 2011

Вы пытались использовать asset_path вместо image_tag?

Также остерегайтесь этого в вашем файле production.rb:
config.action_dispatch.x_sendfile_header = "X-Sendfile" # Используйте 'X-Accel-Redirect' для nginx

При установке apache вам, возможно, придется это закомментировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...