Изображения исчезают после развертывания Rails 3.1.3 на Heroku Cedar - PullRequest
1 голос
/ 25 февраля 2012

После развертывания на геройку кедра, изображения исчезают.

У меня есть CSS как:

:css
  /* */
  table.table thead .sorting { background: url('assets/datatables/sort_both.png') no-repeat center right; }
  table.table thead .sorting_asc { background: url('assets/datatables/sort_asc.png') no-repeat center right; }
  table.table thead .sorting_desc { background: url('assets/datatables/sort_desc.png') no-repeat center right; }
  /* */
  table.table thead .sorting_asc_disabled { background: url('assets/datatables/sort_asc_disabled.png') no-repeat center right; }
  table.table thead .sorting_desc_disabled { background: url('assets/datatables/sort_desc_disabled.png') no-repeat center right; }

и относительный png в app/assets/images/datatables/ Локально работает, но не в Heroku.

Я также мог бы использовать = asset_tag('datatables/icon.png')..., но как это сделать внутри CSS?

Я также безуспешно пробовал config.action_dispatch.x_sendfile_header = nil в config/environments/production.rb.

Ответы [ 2 ]

3 голосов
/ 25 февраля 2012

В производственной среде к активам будет добавлен отпечаток MD5. Важно, чтобы вы использовали помощники пути ресурса, чтобы было использовано правильное имя файла.

Похоже, что вы используете Haml на основе фильтра :css.

В Haml вы можете интерполировать Ruby в элемент с помощью #{ ruby }

:css
  table.table thead .sorting { background-image: url(#{ asset_path('datatables/sort_both.png')}) }
  ... and so on.

Если вы используете Sass / SCSS, вы можете использовать встроенные помощники активов.

table.table thead .sorting { 
  background-image: asset-url('datatables/sort_both.png');
}

Это немного сложнее, если вы используете простой CSS. Вам нужно добавить .erb в файл CSS. ( 'Активы / таблицы стилей / file.css.erb')

table.table thead .sorting {
  background-image: url(<%= asset_path('datatables/sort_both.png') %>);
} 

Вы должны использовать Sass или SCSS. Это самый чистый и худой.

2 голосов
/ 28 апреля 2012

Я только что заработал сам.

Ключ помещает эту строку в ваше приложение. Rb:

config.assets.initialize_on_precompile = false

Используете ли вы камень jquery-datatables-rails?Если нет, то вы должны!Поместите эту строку в свой gemfile:

gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails'

и запустите:

пакетную установку

ПРИМЕЧАНИЕ. Не помещайте его в группу активовили он не будет работать при развертывании на heroku (поскольку группа ресурсов не используется в рабочей среде).

Кроме того, обязательно добавьте эту строку в ваш application.rb (извините, чтобы повторить, но это важно):

config.assets.initialize_on_precompile = false

Добавьте это в ваше application.js

//= require dataTables/jquery.dataTables
//= require dataTables/jquery.dataTables.bootstrap

Добавьте это в ваше application.css:

 *= require dataTables/jquery.dataTables.bootstrap

И добавьте это в свой js.coffeeфайл для вашего контроллера вы используете таблицы данных в:

Если вы используете контейнеры с жидкостью:

#// For fluid containers
$('#dashboard').dataTable({
  "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
  "sPaginationType": "bootstrap"
});

Если вы используете контейнеры с фиксированной шириной:

#// For fixed width containers
$('.datatable').dataTable({
  "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
  "sPaginationType": "bootstrap"
});
...