Как заставить Assetic + sass работать с Symfony2 в Windows? - программирование
Подтвердить что ты не робот

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

Я пытаюсь запустить 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, это будет раздуваться. Тем временем я уже потратил слишком много времени на это.

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

4b9b3361

Ответ 1

Пожалуйста, см. мой ответ на вопрос Как использовать фильтр SCSS в Symfony2 под Windows?: fooobar.com/questions/324349/...

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


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

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

Ответ 2

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

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

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

Это использование PHP 5.4