Как заставить Assetic + sass работать с Symfony2 в Windows?

Я пытаюсь заставить Assetic работать в Symfony 2.0.11, чтобы использовать sass для css-файлов.

Я часами возился с этой проблемой, и, насколько я понял, текущая версия актива (1.0.2) испорчена и просто не может работать в Windows.

Я попытался обновить assets и assetsBundle до последней версии Master с github, но для этого требуется Symfony 2.1, который вносит множество изменений и не имеет обратной совместимости (не говоря уже о том, что он официально не выпущен), так что это не вариант.

Этот пост Компрессор yui symfony2 assets для Windows (синтаксис пути)дает некоторое представление по этому вопросу, но, к сожалению, изменений в библиотеке активов, которые он рекомендует, недостаточно, чтобы заставить его работать должным образом в моем окружающая обстановка.

Я также нашел некоторые интересные фрагменты в 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 (см. https://github.com/kriswallsmith/assetic/issues/92), но я не совсем уверен, что это актуально. Во всяком случае, командная строка, которую я получаю от Assetic, работает в оболочке и выводит ожидаемый css.

3/ sass.bat (расположенный в Ruby193\bin) должен иметь абсолютный путь к ruby.exe, чтобы идти дальше (я узнал, что на собственном горьком опыте вы видите сообщение об ошибке, только если вы var_dump и kill скрипт в нужном месте!)

Теперь все выглядит немного лучше, но все еще не работает с sass (думаю, с некоторыми другими фильтрами все будет хорошо) Мне удалось изолировать проблему в Process.php (около строки 172) в «$data = fread($pipe, 8192);» : Второй раз, когда скрипт проходит в этом месте, когда $pipe указывает на второй ресурс, он никогда не возвращается ... и php зависает, и у него действительно тяжелые времена (мне нужно убить / перезапустить wamp по крайней мере два раза, чтобы быть в состоянии сделать еще один тест)

Я действительно не знаком с proc_open и потоками, и мне трудно понять, что код пытается там сделать...

Я надеюсь, что это может помочь следующему, кто попытается чтобы все работало и, в конечном итоге, помогло и моему делу. Все еще ищу поддержку по этому вопросу!

_____Обновление:

Дальнейшее тестирование помогло мне понять, что у меня может работать "php app/console assets:dump", когда файл sass достаточно мал.Мне кажется, что фактические правила css (исключая определения переменных и примеси) должны занимать меньше 4096 байт с php5.3.10, и даже меньше с php 5.3.8. Это указывает на ошибку proc_open, описанную в https://bugs.php.net/bug.php?id=60120и https://bugs.php.net/bug.php?id=51800

_____Обновление:

Я попытался установить 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. Изменитьcompile.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. Укажите 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. заблокировать файл тоже!

и выполните "установку 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 и отредактируйте компас. bat, чтобы установить абсолютный путь к ruby.exe (сделайте то же самое с sass.bat, пока вы это делаете)

6.Измените вызов в шаблоне

Вот как сейчас выглядит мой:

{% stylesheets filter='compass' output='css/*.css'
        '@LndBimBundle/Resources/public/css/main.scss'
    %}
        
    {% 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 assetsic:dump --no-debug" в вашем cli, чтобы создать файлы css в web\css и обновить страницу вашего сайта. И вуаля! (надеюсь!)

Примечание. Как вы могли заметить, я использую CompassFilter вместо SassFilter. Это потому, что он делает то же самое (и даже больше) и его можно заставить делать то, что мы от него ожидаем. Если кто-нибудь сможет узнать, как починить SassFilter, это будет здорово. Между тем я уже слишком много времени потратил на это.

Я несколько дней таскал себя за волосы из-за этого сумасшествия, надеюсь, этот пост будет полезен для психического здоровья некоторых других людей ;)

17
задан 18 revs, 2 users 60% 23 May 2017 в 12:34
поделиться