Я пытаюсь запустить Assetic в Symfony 2.0.11, чтобы использовать sass для файлов css.
Я много часов занимался этой проблемой, и из того, что я собираю, текущая версия (1.0.2) добавлена и просто не может работать в окнах.
Я попробовал обновить assetic и asseticBundle до последней версии Master от github, но для них требуется Symfony 2.1, которая вносит много изменений и не имеет обратной совместимости (не говоря уже о том, что она официально не выпущена), так что не вариант.
Этот пост symfony2 assetics yui compressor на окнах (синтаксис пути) дает некоторое хорошее представление по этому вопросу, но, к сожалению, изменения в assetic lib, которые он рекомендует, не являются достаточно, чтобы он работал правильно в моей среде.
Я нашел некоторые интересные биты и в https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246c и https://github.com/kriswallsmith/assetic/issues/25
В конце концов, я знаю, что мне нужно изменить vendor/assetic/src/Assetic/Util/ProcessBuilder.php, возможно, некоторые другие файлы в пакете и, возможно, добавить некоторые сведения в мой файл config.yml( кажется, что добавление пути к java или sass может помочь).
Мне нужно, чтобы кто-то смог получить рабочую конфигурацию, чтобы дать мне указатели на то, что мне не хватает, или, в идеале, шаги, необходимые для работы этой чертовой вещи.
Кто-нибудь до задачи?
_____ Обновление: Все еще копая, это было всего лишь 3 дня:/
Новые элементы:
1/php5.3.8 может возникнуть проблема с proc_open и данными > 2048 байтов по https://bugs.php.net/bug.php?id=60120 Эта проблема может иметь последствия при получении symfony из репозитория git (https://github.com/symfony/symfony/issues/3216). выдача "git config --global core.autocrlf input" и повторное извлечение всего из git позволили мне без проблем использовать php5.3.10.
2/https://github.com/kriswallsmith/assetic/commit/5621cd449b0d85316e5872d672e7e900edc2246c выглядит прилично. Я немного изменил пути в Process.php(cf https://github.com/kriswallsmith/assetic/issues/92), но я не уверен, что это актуально, Во всяком случае, командная строка, которую я получаю от Assetic, в данный момент работает в оболочке и выводит ожидаемый css.
3/sass.bat(находится в Ruby193\bin) должен иметь абсолютный путь к ruby.exe, чтобы идти немного дальше (я узнал, что это трудно, вы видите только сообщение об ошибке, если вы var_dump и kill script в нужном месте!)
Теперь все выглядит немного лучше, но все еще не работает с sass (я думаю, что это будет хорошо работать с некоторыми другими фильтрами) Мне удалось выделить проблему в Process.php(около строки 172) в "$ data = fread ($ pipe, 8192)";: Во второй раз, когда script проходит в этом месте, с $pipe, указывающим на второй ресурс, он никогда не возвращается... и php застревает и имеет очень тяжелые времена (я должен убить/перезапустить wamp по крайней мере два раз, чтобы иметь возможность сделать еще один тест)
Я действительно не знаком с proc_open и потоками, и у меня возникают трудности с пониманием того, что код пытается сделать там...
Я надеюсь, что это поможет следующей, которая пытается заставить все работать, и в конечном итоге поможет моему делу. По-прежнему ищу поддержку в этом вопросе!
_____ Обновление:
Дальнейшее тестирование заставило меня понять, что я мог бы использовать "php app/console assetic: dump", когда файл sass был достаточно мал. Мне кажется, что фактические правила css (исключая определения переменных и mixins) мне понадобятся меньше 4096 байт с php5.3.10, тем более с php 5.3.8. Это указывает на ошибку proc_open, описанную в https://bugs.php.net/bug.php?id=60120 и < а8 >
_____ Обновление:
Я попытался установить php5.4, чтобы проверить, исправляет ли он проблему. Мне потребовалось некоторое время, чтобы понять, почему эта версия не работает на моем компьютере, потому что еще нет сборки x64. Затем я установил 32-битную версию wamp и легко работал с php5.4. Конечный результат: proc_open все еще висит:( Здесь я начинаю быть без идей...
Краткое руководство:
Итак, в конце концов я получил это на работу, и подумал, что попытаюсь суммировать самые важные шаги для более поздних зрителей:
1. Установите Ruby 1.9.3 и компас 0.12
проверить http://rubyinstaller.org/downloads/
Обновить компас до 0.12 с помощью
"gem update --system"
а затем
"gem install compass"
2. Alter compiler.rb в компасе
Перейдите в Ruby193\lib\ruby \ gems\1.9.1\gems\compass-0.12.0\lib\compass в строке 10, замените
self.from, self.to = File.expand_path(from), to
с
self.from, self.to = from.gsub('./', ''), to
/!\с некоторой настройкой, это может быть наоборот, но с настройкой, которую я пытаюсь описать, это происходит так.
3. point Assetic для последней версии, которая работает с symfony 2.0.11
отредактируйте файл deps следующим образом:
[assetic]
git=http://github.com/kriswallsmith/assetic.git
;version=v1.0.2
version=ac71449e46bed22c276da26bf54ab2f733b3801d
[AsseticBundle]
git=http://github.com/symfony/AsseticBundle.git
target=/bundles/Symfony/Bundle/AsseticBundle
;version=v1.0.1
version=da4a46ce37557dcf3068b8493b12bdbbe47455e2
/!\вам также нужно удалить ссылки на определенную версию в файле deps.lock!
и выпустить "установку php bin/vendors".
4. Измените свой config.yml
вот как выглядит мое сейчас:
# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: false
# java: /usr/bin/java
filters:
compass:
bin: e:\outils\Ruby193\bin\compass.bat
5. Используйте абсолютный путь в compass.bat/sass.bat
Перейдите в каталог Ruby193\bin и отредактируйте compass.bat, чтобы установить абсолютный путь к ruby.exe(сделайте то же самое с sass.bat, пока вы на нем)
6. Измените вызов в шаблоне
Вот как выглядит мое сейчас:
{% stylesheets filter='compass' output='css/*.css'
'@LndBimBundle/Resources/public/css/main.scss'
%}
<link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}
Тестирование:
Для тестирования вы можете использовать
php app/console assetic:dump --verbose --no-debug
Таким образом, если вы входите в бесконечный цикл, как и я, вы можете просто ctrl + C, что делает процесс тестирования более эффективным, чем в браузере
/!\Вам абсолютно необходимо использовать -no-debug, иначе вы получите кучу нежелательных строк в css, которые выглядят так:
@media -sass-debug-info{filename{font-family:file\:\/\/C\:\/Users\/Mattso\/AppData\/Local\/Temp\/ass9DBF\.tmp\.scss}line{font-family:\0000359}}
Вы можете использовать
die($this->commandline);
в методе выполнения
vendor\assetic\src\Assetic\Util\Process.php
чтобы показать текущую командную строку и протестировать ее.
В настоящее время шахта выглядит так:
cmd /V:ON /E:ON /C ""e:\outils\Ruby193\bin\compass.bat" "compile" "C:\Users\Mattso\AppData\Local\Temp" "--config" "C:\Users\Mattso\AppData\Local\Temp\ass59BB.tmp" "--sass-dir" "" "--css-dir" "" "C:\Users\Mattso\AppData\Local\Temp\ass59BC.tmp.scss""
Затем вам просто нужно ввести "php app/console assetic: dump --no-debug" в вашем кли, чтобы создать css файлы в web\css и обновить страницу вашего сайта. И вуаля! (Надеюсь!)
Примечание. Как вы могли заметить, я использую CompassFilter вместо SassFilter. Это потому, что он делает то же самое (и многое другое) и может фактически быть сделано, чтобы делать то, что мы ожидаем от него. Если кто-нибудь может узнать, как исправить SassFilter, это будет раздуваться. Тем временем я уже потратил слишком много времени на это.
Я тянул свои волосы в течение нескольких дней на эту сумасшествие, я надеюсь, что этот пост будет полезен для некоторых других людей психического здоровья;)