2011-07-01 9 views
10

Przetestowałem kompresor YUI w linii poleceń (w systemie Windows) i wygląda na to, że działa dobrze.Assetic + YUI Compressor in symfony 2: czy to błąd?

Ale .css stworzony przez assetic nie jest skompresowany, a pochodzi z tej wiadomości na szczycie (wewnątrz .css!):

/* 
[exception] 500 | Internal Server Error | RuntimeException 
[message] 
[1] RuntimeException: 
      at n/a 
       in E:\websites\symfony2\public_html\Symfony\vendor\assetic\src\Assetic\Filter\Yui\BaseCompressorFilter.php line 81 

      at Assetic\Filter\Yui\BaseCompressorFilter->compress(' 

Czy to problem z konfiguracją? A może błąd w jakości?

Oto kod użyłem w moim gałązka Szablon:

{% stylesheets '@CompanyBundlenameBundle/Resources/public/css/style.css' filter='yui_css' %} 
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" /> 
{% endstylesheets %} 
+0

Mam ten sam dokładny problem, ale na Mac OS X Lion. –

+0

Wygląda na to, że YUI rzuca ten błąd. Czy jesteś w stanie uruchomić kompresor przez style.css poza Assetic? –

Odpowiedz

4

kompresor YUI musi być zdefiniowanie w swojej app/config/config.yml tak:

assetic: 
    debug:   %kernel.debug% 
    use_controller: false 
    filters: 
     cssrewrite: ~ 
     yui_css: 
      jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.6.jar 

Oczywiście, trzeba pobrać kompresor YUI i skopiuj go do katalogu /app/Resources/java/.

ostrzeżenie, assetic wiązka nie publikuje swoje kompresji CSS automatycznie, trzeba opublikować je ręcznie za pomocą następującego polecenia:

php app/console assetic:dump 
+0

Na devie publikuje je automatycznie. W każdym razie spróbowałem polecenia dump i pojawił się ten sam błąd: RuntimeException. To frustrujące, wygląda na to, że testują tylko kod na Linuksie. – HappyDeveloper

+0

Pracuję na Linuksie i nie mogę odtworzyć błędu w moim systemie. Przetestuj problem [symfony github] (http://github.com/symfony/symfony), zespół jest bardzo reaktywny. – egeloen

3

Właśnie ten sam problem.

co zrobiłem do rozwiązania:

  • otworzyć "deps" plik.
  • Usuń wiersz "version = v1.0.0RC1" w sekcji "[AsseticBundle]".
  • Uruchom polecenie "bin/vendors update", aby pobrać najnowszą wersję AsseticBundle.

Mam nadzieję, że to pomoże.

3

Nie jestem pewien, czy to rozwiązałeś, ale miałem już ten sam problem.

Postępowałem zgodnie z powyższymi sugestiami, ale wciąż nie było radości.

Więc zajrzałem do błędu wewnętrznego 500 a błąd był otrzymuję było:

[message] Warning: file_put_contents(): Filename cannot be empty in /Applications/MAMP/htdocs/shop/vendor/assetic/src/Assetic/Filter/Yui/BaseCompressorFilter.php line 84 

zajrzałem do pliku w wierszu 84 i że linia miała:

$input = tempnam(sys_get_temp_dir(), 'assetic_yui_compressor'); 

Po pewnym kopania wokół i debugowania Stwierdziłem, że uprawnienia do mojego katalogu tymczasowego używanego przez sys_get_temp_dir() były nieprawidłowe.

Po rozwiązaniu tych uprawnień działało dobrze.

Nie jestem pewien, czy to był ten sam błąd, który otrzymałeś, ale jeśli mam taką nadzieję, to ta pomoc.

Cheers

Adam

5

Mam ten sam problem ...(Problem wydaje się występować tylko w systemie Windows) Jedynym sposobem znalazłem, jest naprawdę brudna:

1 - Określ java ścieżkę wykonywalny w pliku konfiguracyjnym (w tym samym miejscu toru Yui deklaracji jar)

yui_css: 
    jar: "%kernel.root_dir%\\Resources\\java\\yuicompressor.jar" 
    java: "C:\\Program Files\\Java\\jre6\\bin\\java.exe" 

2 - Otwórz plik Assetic \ Util \ Process.php zmienić linię "proc_open" (linia 123) w moja wersja "run" metody oryginalnym składzie:

$process = proc_open($this->commandline, $descriptors, $pipes, $this->cwd, $this->env, $this->options); 

Zmodyfikowana linia:

$process = proc_open('"'.$this->commandline.'"', $descriptors, $pipes, $this->cwd, $this->env, $this->options); 

i to działa ... ale nie jest prawdziwym rozwiązaniem ...

Jeśli ktoś ma więcej informacji ... dzięki :)

5

Jeśli używasz najnowszej stabilnej wersji (1.0.2), to ma błąd, który uniemożliwia prawidłowe korzystanie z kompresora YUI w systemie Windows. Jak zauważył @Pierre, problem leży w sposobie wywołania funkcji proc_open, ale poprawka powinna być zastosowana gdzie indziej.

Jeśli spojrzeć na klasy Assetic \ Util \ ProcessBuilder znajdziesz winowajcę na linii 95:

#95 if (defined('PHP_WINDOWS_MAJOR_VERSION')) { 

Nie ma takiej stałej w PHP jako PHP_WINDOWS_MAJOR_VERSION (http://php.net/manual/en/info.constants.php), co sprawia, że ​​if test ocenia na false. Zamiast tego należy użyć wartości PHP_WINDOWS_VERSION_MAJOR.

Druga sprawa znalazłem w tej klasie jest kilka linii poniżej:

#102 if ($args) { 
#103 $script .= ' '.implode(' ', array_map('escapeshellarg', $parts)); 
#104 } 

$parts nie jest zdefiniowane w tym zakresie i powinien zostać zastąpiony $args.

Jak się dowiedziałem, oba problemy zostały naprawione 16 września w tym zatwierdzeniu: https://github.com/kriswallsmith/assetic/commit/cc2e9adb744df0704a5357adc1cf9287c427420f , ale kod nie został jeszcze oznaczony.

Mam nadzieję, że to pomoże.

+0

Dzięki za rozwiązanie. Rozwiązuje mój problem – Permana

2

Dzięki postowi Jana Molaka mogłem z powodzeniem uruchomić Assetic Less Filter w Symfony 2 na Windows Vista.

W moim pliku deps Zmieniłem

[assetic] 
    git=http://github.com/kriswallsmith/assetic.git 
    version=v1.0.3 

do

[assetic] 
    git=http://github.com/kriswallsmith/assetic.git 
    version=cc2e9adb744df0704a5357adc1cf9287c427420f 

a następnie uruchomić

php bin\vendors update 

Mam nadzieję, że ta zmiana nie będzie powodować inne problemy. Na razie wszystko działa zgodnie z oczekiwaniami.

Powiązane problemy