2011-07-01 97 views
10

我已經在命令行(在windows上)測試了YUI壓縮器,它似乎工作得很好。symfony 2中的Assetic + YUI Compressor:這是一個錯誤嗎?

但通過assetic創建的CSS沒有被壓縮,並配有此消息在頂部(名爲.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(' 

這是一個配置問題?還是資產缺陷?

這裏是我在我的樹枝模板中使用的代碼:

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

我有同樣的確切問題,但在Mac OS X Lion上。 –

+0

看起來像YUI拋出這個錯誤。你可以在Assetic之外的style.css上運行壓縮器嗎? –

回答

4

YUI壓縮機需要在你的app/config/config.yml被那樣定義:

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

當然,你需要下載YUI壓縮機並將其複製到您的/app/Resources/java/目錄中。

警告,該assetic包不發佈壓縮CSS全自動,你需要用以下命令手動發佈他們:

php app/console assetic:dump 
+0

在開發它自動發佈它們。無論如何,我嘗試了轉儲命令,並出現相同的錯誤:RuntimeException。這令人沮喪,似乎他們只在linux上測試代碼。 – HappyDeveloper

+0

我在linux上工作,我無法在我的系統上重現您的錯誤。測試[symfony github](http://github.com/symfony/symfony)問題,該團隊非常反應。 – egeloen

3

我剛剛得到這個同樣的問題。

我做了什麼來解決:

  • 打開 「DEPS」 文件。
  • 刪除「[AsseticBundle]」部分中的「version = v1.0.0RC1」行。
  • 運行「bin/vendors update」命令獲取最新版本的AsseticBundle。

希望這會有所幫助。

3

不知道你是否解決了這個問題,但今天我有同樣的問題。

我遵循上面的建議,但仍然沒有喜悅。

所以我看着500內部錯誤,我得到的錯誤是:

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

我看着文件,在線路84和線路有:

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

一些挖後圍繞和調試,我發現sys_get_temp_dir()使用的臨時目錄的權限是錯誤的。

一旦我解決了這些權限,它工作正常。

我不確定這是否與您收到的錯誤相同,但如果有的話,希望這可以幫到您。

乾杯

亞當

5

我有同樣的問題...(這個問題似乎只存在於窗) 我發現的唯一辦法,就是真髒:

1 - 指定(在同一個地方YUI的罐子聲明路徑)

yui_css: 
    jar: "%kernel.root_dir%\\Resources\\java\\yuicompressor.jar" 
    java: "C:\\Program Files\\Java\\jre6\\bin\\java.exe" 
在配置文件中的Java可執行文件路徑

2 - 打開Assetic \的Util \ Process.php文件 更改 「運行」 方法 原始行 「proc_open」 線(線123我的版本):

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

修改線:

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

而且它的作品...但不是一個真正的解決方案......

如果有人有更多的信息.​​..謝謝:)

5

如果您使用的是最新的穩定版本(1.0.2),那麼它有一個錯誤,阻止它在Windows上正確使用YUI壓縮器。 正如@Pierre指出的那樣,問題在於調用proc_open函數的方式,但修復應該應用在別處。

如果你看看Assetic \的Util \的ProcessBuilder類,你會發現在第95行的罪魁禍首:

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

有沒有在PHP沒有這樣的常數PHP_WINDOWS_MAJOR_VERSIONhttp://php.net/manual/en/info.constants.php),這使得if語句測試評估爲錯誤。應該用什麼來代替PHP_WINDOWS_VERSION_MAJOR

的第二個問題,我在這個類中是一對夫婦低於行:

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

$parts並不在此範圍內確定,並應與$args更換。

正如我後來發現的那樣,這個提交中兩個問題已在16.09修復:https://github.com/kriswallsmith/assetic/commit/cc2e9adb744df0704a5357adc1cf9287c427420f 但該代碼尚未被標記。

希望這會有所幫助。

+0

感謝您的解決方案。它解決了我的問題 – Permana

2

感謝Jan Molak的帖子,我能夠在Windows Vista上成功運行Symfony 2中的Assetic Less Filter。

在我DEPS文件,我已經改變

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

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

,然後運行

php bin\vendors update 

我希望這次更新將不會導致其他問題。 現在一切似乎按預期工作。