Веб-развертывание со сжатыми файлами - PullRequest
1 голос
/ 13 сентября 2010

Короткая версия

При использовании файловых компрессоров, таких как YUI-компрессор, какова правильная процедура развертывания вашего веб-сайта, чтобы вам не приходилось связываться со сжатыми файлами во время разработки?Должен ли быть сценарий сжатия как часть процесса выпуска?

Длинная версия

Я только что присоединился к проекту, где мы используем компрессор YUI для наших файлов JS и CSS.Я столкнулся с некоторыми кусками кода, которые мне казались очень плохо пахнут.Мне интересно, есть ли лучший способ сделать это.

Я думаю, что при работе над кодом разработчики должны иметь возможность работать с несжатыми файлами, и веб-сайт должен работать и отражать свои изменениякак они идут.Затем измененные файлы CSS и JS могут быть сжаты во время выпуска.Это не совсем так.

По сути, на наших основных страницах php проверяется PHP_SAPI и, если это командная строка, запускаются компрессоры.Это состоит из запуска exec на git log, а затем некоторого волшебства sed для получения номера текущей ревизии (который будет использоваться как версия файла css и js), затем proc_open с помощью yuicompressor, запустите его нафайлы, еще несколько exec s, чтобы добавить новые файлы в git ... и затем какой-то вуду заходит в сам файл php (да, он самоизменяется) и изменяет объявление переменной $version на новый номер ревизии.,Эта переменная используется для include правильных файлов CSS и JS.

Когда я впервые проверил код из нашего репо, веб-сайт работал локально, но CSS не было.Коллега сказал мне, что мне нужно запустить скрипт оболочки, который вызвал заклинание выше.Потребовалось около получаса для настройки прав доступа к файлу, прежде чем это удалось.

Это пахнет так же плохо, как я думаю?Как мы можем избавиться от этого как на этапе разработки и иметь возможность просто включать обычные несжатые файлы во время разработки?Сейчас я не могу внести изменения в указанные файлы и сразу же их увидеть.Проблема с выполнением этого во время выпуска заключается в том, что включаемые файлы должны быть изменены на сжатые файлы во время сжатия файлов.Похоже, что для этого потребуются также скрипты, которые модифицируют код.Есть идеи?

1 Ответ

1 голос
/ 24 сентября 2010

Чувак :) Я могу помочь вам в этом - я (в основном) портировал YUI Compressor на .NET, потому что мне нужно было убедиться, что ... при развертывании нашего кода ... на публичных серверах были уменьшены / объединены css и js. .. Это может относиться к любому языку / сценарию развертывания, несмотря на то, что мои сценарии зависят от .NET / TFS.

Хитрость заключается в том, чтобы убедиться, что исходные файлы во время разработки не затрагиваются вообще. Никогда. Только когда вы отправляете код с ваших собственных машин разработки (он же Localhost) на другие серверы (т.е. Dev / Test / Uat / Live-Production), css / js должны быть минимизированы и / или объединены.

Слишком сложно работать с минимизированными и / или комбинированными css / js при работе на ваших локальных dev-машинах. ОСОБЕННО, если вы работаете с интерфейсом пользователя ... т.е. делает javascript / html / css.

Так что же нам делать? Прежде всего, нам нужно решение для развертывания. Для .NET мы используем TFS для развертывания нашего кода на серверах. Но есть много других опций ... как я думаю, что в пипсах Ruby On Rails можно использовать Rake и добавить туда задачу YUICompressor.

С TFS у нас происходит непрерывная интеграция ... поэтому, когда какой-то код регистрируется, наша система более или менее выполняет следующее (что является сутью этого поста).

.. во временную локацию ...

  • Получить последний код
  • Скомпилируйте последний код
  • Сократите и / или объедините любые js или css .. и эти вновь созданные файлы отправляются во временную папку, где был скомпилирован код.
  • Публикация этого кода / веб-сайта из этого временного местоположения на желаемом веб-сервере (dev / test / uat / prod и т. Д.).

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

Так что, если вы можете сказать нам

  • где хранится ваш код (исходный код). Я думаю, что вы сказали GIT?
  • на каком языке (php?)
  • и, самое главное, как вы получаете код из системы контроля версий на работающий сервер?
...