Подтвердить что ты не робот

Файлы, созданные с помощью актива: precompile не соответствуют URL-адресам, сгенерированным stylesheet_link_tag (отсутствует дайджест) в минимальных рельсах 4 сайта

Я использую Ruby 2.0.0-p247 и Rails 4.0.0

Если я создаю минимальный сайт Rails 4 следующим образом:

rails new minimal
cd minimal
rails generate controller home index
tee config/routes.rb <<EOF
Minimal::Application.routes.draw do
  root 'home#index'
end
EOF

Затем прекомпилируйте активы с помощью

rake assets:precompile

Он генерирует такие активы, как:

I, [2013-09-04T17:05:36.992951 #3549]  INFO -- : Writing /WORKINGDIR/minimal/public/assets/application-723d1be6cc741a3aabb1cec24276d681.js
I, [2013-09-04T17:05:37.052303 #3549]  INFO -- : Writing /WORKINGDIR/minimal/public/assets/application-f1a14051f17824976271b9c0460232f0.css

Но если я запустил сервер в режиме производства,

RAILS_ENV=production rails s

Сгенерированные URL-адреса в HTML не указывают на предварительно скомпилированные файлы:

<link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/javascripts/application.js"></script>

Я бы ожидал, скорее:

<link data-turbolinks-track="true" href="assets/application-f1a14051f17824976271b9c0460232f0.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-723d1be6cc741a3aabb1cec24276d681.js"></script>

Настройки config/environments/production.rb по умолчанию говорят, что используйте дайджесты:

config.assets.digest = true

Но, похоже, это выборочно игнорируется?

Я что-то пропустил?

UPDATE:

Я только что протестировал это в Rails 4.2.3, и это, кажется, исправлено, однако нам нужно передать еще несколько переменных среды в команду rails s для запуска в рабочем режиме:

SECRET_KEY_BASE=$(rake secret) RAILS_SERVE_STATIC_FILES=true RAILS_ENV=production rails s
4b9b3361

Ответ 1

Пока я писал этот вопрос, я столкнулся с этим сообщением в блоге, в котором говорится, что это ошибка.

http://railsblog.kieser.net/2013/08/rails4-phusion-passenger-asset-pipeline.html

Из различных предложений, просто устанавливая резервную копию компиляции...

config.assets.compile = true

кажется достаточным для того, чтобы вызывать Rails для генерации правильно переваренных URL-адресов:

<link data-turbolinks-track="true" href="/assets/application-f1a14051f17824976271b9c0460232f0.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-723d1be6cc741a3aabb1cec24276d681.js"></script>

Другое предложение, явно устанавливающее RAILS_ENV и RAILS_GROUPS, казалось, создавало различные строки дайджеста в предварительно скомпилированных файлах, но они всегда, похоже, совпадают с созданным HTML независимо.

Ответ 2

Мне удалось разрешить ссылки на ресурсы, не включая дайджест, набив номер версии актива.

     # Version of your assets, change this if you want to expire all your assets
-    config.assets.version = '1.0'
+    config.assets.version = '2.0'

Вы найдете это в config/application.rb, если вы обновляете или находитесь в более раннем местоположении config/initializers/asset.rb