Как добавить версию ресурсов к css и js?

Я хочу, чтобы assets выводил сжатые js и css примерно так: v2.3.1/css/whatever.css

В настоящее время я выгружаю свои css и js для производства следующим образом: $ php app/console assetic:dump --env=prod --no-debug. Но они сбрасываются в css/ и js/ без версии.

Я прочитал это, но, похоже, это относится к изображениям только не css/js.

Важной причиной для этого является очистка/аннулирование кеша.


person ChocoDeveloper    schedule 10.08.2012    source источник


Ответы (3)


Да, известная проблема... В нашем производственном рабочем процессе мы получили такой блок в bin/vendors скрипте:

if (in_array('--env=dev', $argv)) {
    system(sprintf('%s %s assets:install --symlink %s', $interpreter, escapeshellarg($rootDir . '/app/console'), escapeshellarg($rootDir . '/web/')));
    system(sprintf('%s %s assetic:dump --env=dev', $interpreter, escapeshellarg($rootDir . '/app/console')));
    system(sprintf('%s %s myVendor:assets:install --symlink ', $interpreter, escapeshellarg($rootDir . '/app/console')));
} else {
    system(sprintf('%s %s assets:install %s', $interpreter, escapeshellarg($rootDir . '/app/console'), escapeshellarg($rootDir . '/web/')));
    system(sprintf('%s %s assetic:dump --env=prod --no-debug', $interpreter, escapeshellarg($rootDir . '/app/console')));
    system(sprintf('%s %s myVendor:assets:install ', $interpreter, escapeshellarg($rootDir . '/app/console')));
}

Как видите, мы определили нашу консольную команду, которая устанавливает ресурсы в веб-папку после установки и сброса ресурсов Symfony. В сценарии MyVendorCommand мы делаем что-то вроде этого:

$version = $this->getContainer()->getParameter('your_version_parameter');
$assetsInstallCommand = $this->getApplication()->find('assets:install');

$commandOptions = $input->getOptions();

$assetsInstallArguments = array(
    'command' => 'assets:install',
    'target' => 'web/version-' . $version,
    '--symlink' => $commandOptions['symlink']
);

$assetsInstallInput = new ArrayInput($assetsInstallArguments);
$returnCode = $assetsInstallCommand->run($assetsInstallInput, $output);
person Vitalii Zurian    schedule 10.08.2012
comment
О, я вижу. Ну, я мало что знаю о внутренностях sf2, а также я использую v2.1, поэтому bin/vendors больше нет. Но вы подали идею, и она сработала: я добавил часть создания символической ссылки в свой сценарий развертывания (vXXX/css -> css и vXXX/js -> js). Спасибо еще раз! знак равно - person ChocoDeveloper; 10.08.2012

Хо, это большая ошибка Symfony2! Я не уверен, что кто-то сообщил об этом!

Мое решение состояло в том, чтобы добавить псевдоним в конфигурацию Nginx, но ваш — это def. чище и лучше.

person Thomas Decaux    schedule 11.08.2012

Мой обходной путь - создать rewriteRule в файле .htaccess, чтобы обслуживать реальный файл, но принимая полный URL-адрес с номером версии. Что-то вроде этого ...

приложение/config/config.yml

[...]
engines: ['twig']
assets_version: 20140523  # numeric version
assets_version_format: "assets-%%2$s/%%1$s"
[...]

веб/.htaccess

[...]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^assets-([0-9]*)/(.*)$ ./$2 [L]
[...]
person jonaguera    schedule 26.05.2014