Как заставить Assetic + sass работать с Symfony2 в Windows? - PullRequest
17 голосов
/ 09 марта 2012

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

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

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

Этот пост symfony2 сборка yui компрессор на 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 и убьете скрипт в нужном месте!)

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

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

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

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

Дальнейшее тестирование дало мне понять, что у меня может получиться "php app / consoleassetic: 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

check http://rubyinstaller.org/downloads/

Обновите компас до 0.12 с помощью

"gem update --system"

, а затем

"gem install compass"

2.Измените 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 install".

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:00":дамп --no-debug "в вашем cli для создания css-файлов в web \ css и обновления страницы вашего сайта.И вуаля!(надеюсь!)

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

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

Ответы [ 2 ]

3 голосов
/ 05 декабря 2012

Так же, как обновление этого вопроса (или для тех, кто использует только sass, а не компас), если кто-то приходит сюда в поисках ответа.Все, что нужно сейчас, это:

assetic:
    filters:
        cssrewrite: ~
        sass: 
          bin: "<pathtosass>"
          apply_to: "\.scss$"

parameters:
     assetic.ruby.bin: '<pathtoyourrubyhere>'

Это использует PHP 5.4

2 голосов
/ 12 марта 2012

Пожалуйста, смотрите мой ответ на вопрос Как использовать фильтр SCSS в Symfony2 под Windows ?: https://stackoverflow.com/a/9658410/3765

Это довольно полное освещение моего времени, потраченного на то, чтобы заставить Assetic работать на Windows.


На основании вашего примера - вам не нужно добавлять фильтр cssrewrite. Вот как я использую Compass от Twig:

{% stylesheets filter='compass' output='css/compiled/*.css' 'css/example.scss' %}
    <link rel="stylesheet" href="{{ asset_url }}">
{% endstylesheets %}
...