2014-03-05 60 views
7

當運行應用程序/控制檯assetic:轉儲,我得到:Symfony2的Assetic:路徑節點可執行無法解析

路徑節點可執行文件無法解析

這是什麼意思和如何解決這個問題?

當試圖通過app_dev.php瀏覽項目時,瀏覽器嘗試下載css和js文件時出現HTTP 500錯誤。

+0

您是否使用任何需要node.js像uglify的資產過濾器? – Ramesh

回答

18

首先確保您已安裝節點並找到節點的路徑。你通常可以通過使用which node找到這個,它會返回類似/usr/local/bin/node的東西。如果它返回類似/usr/bin/which: no node in ...的東西,則需要安裝節點。

接下來配置symfony。打開你的config.yml(./app/config/config.yml)和節點到你assetic配置的路徑,即:

# app/config/config.yml 
assetic: 
    node: /usr/local/bin/node 
+0

爲了闡述我將節點更改爲/ usr/bin/nodejs並且它對我有用。 –

1

您是否使用了像uglify這樣的過濾器?

如果是這種情況,Assetic會引發此錯誤,因爲該進程存在代碼127,這意味着節點可執行文件無法運行。

檢查您config.yml路徑:

# app/config/config.yml 
assetic: 
    filters: 
     uglifyjs2: 
      bin: /path/to/uglifyjs 

,並確保它是可執行的:

chmod +x /path/to/uglifyjs 
+0

你的答案適用於我,但它需要一些額外的更正。我們必須通過鍵入「which uglifycss」「uglifyjs」並將其寫入config_dev.yml和config.yml文件來學習uglifyjs和uglifycss文件的路徑 –

0

只是做一個作曲家更新(PHP composer.phar更新),那麼試着傾銷您的資產。 它可能不是第一次工作,所以再次更新作曲家。

5

這爲我工作

sudo apt-get remove nodejs 
sudo apt-get remove npm 

sudo curl -sL https://deb.nodesource.com/setup | sudo bash - 

sudo apt-get install nodejs 
3

我想補充的確切同時出錯

php app/console assetic:dump --env=prod 

在Ubuntu上,節點和nodejs二進制之間存在混淆。 要解決此問題,您需要安裝節點二進制文件。 在我的情況下,二進制文件是nodejs,所以它不起作用。

在Ubuntu上,節點會告訴你節點是否已被安裝的命令。 嘗試使用哪個節點,如果不起作用,請嘗試使用哪個nodejs。

所以要確保沒有混亂我所做的:

sudo apt-get remove nodejs 
    curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash - 
    sudo apt-get install -y nodejs 

檢查node website在curl命令正確的URL。您可能需要節點5.X.

現在,當你做

which node 
/usr/bin/node 

你有正確的二進制文件名(節點代替的NodeJS)。

之後它應該工作。如果沒有檢查config.yml節點路徑(檢查是否有在config_prod和config_dev沒有其他聲明)

2

我發現,即使你設置的config.yml你還是會發現assetic /usr/bin/node試圖使用/usr/local/bin/node

的快速和骯髒的方式來解決這個問題是:

ln -sf /usr/bin/node /usr/local/bin/node 

如果您有任何疑問,暫時編輯vendor/kriswallsmith/assetic/src/Assetic/Filter/UglifyJs2Filter.php

編輯接近行136:

 if (127 === $code) { 
      throw new \RuntimeException('Path to node executable could not be resolved.'); 
     } 

- >

 if (127 === $code) { 
      throw new \RuntimeException('Path to node executable could not be resolved.' . $this->nodeBin); 
     } 

這會告訴你資產期望下一次資產失敗的節點。

我在成立assetic發現配置爲看/usr/local/bin在PROD模式dev模式,但/usr/bin。 所以值得檢查config.ymlconfig_dev.ymlconfig_prod.yml

+0

快而骯髒,但它讓我再次去。謝謝! – Peter