Symfony2 Assetic:无法解析节点可执行文件的路径

时间:2014-03-05 12:45:50

标签: symfony assetic

当运行app / console assetic:dump时,我得到:

  

无法解析节点可执行文件的路径

这是什么意思以及如何解决这个问题?

当尝试通过app_dev.php浏览项目时,我在浏览器尝试下载css和js文件时收到HTTP 500错误。

6 个答案:

答案 0 :(得分:18)

首先确保已安装节点并找到节点的路径。您通常可以使用which node来查找此内容,这将返回/usr/local/bin/node之类的内容。如果返回类似/usr/bin/which: no node in ...的内容,则需要安装节点。

接下来配置symfony。打开config.yml(./app/config/config.yml)和节点到资产配置的路径,即:

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

答案 1 :(得分: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

答案 2 :(得分:4)

我在执行

时添加完全相同的错误
php app/console assetic:dump --env=prod

在Ubuntu上,节点和nodejs二进制文件之间存在混淆。 要解决此问题,您需要安装节点二进制文件。 在我的情况下,二进制文件是nodejs,所以它没有工作。

在Ubuntu上,命令which node将告诉您节点是否已经过时。 试试which node,如果它不起作用,请尝试which nodejs

所以要确保我没有混淆:

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

在curl命令中检查node website中是否有正确的URL。您可能需要节点5.X。

现在你做的时候

which node
/usr/bin/node

您有正确的二进制名称(节点而不是nodejs)。

在此之后它应该工作。如果没有检查config.yml中的节点路径(检查config_prod和config_dev中没有其他声明)

答案 3 :(得分:2)

我发现,即使您在/usr/bin/node中指定config.yml,您仍可能会发现资产正在尝试使用/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);
        }

这将告诉您资产预期节点下次资产失败的位置。

我在设置中发现资产已配置为在/usr/local/bin模式下dev但在产品模式下/usr/bin。 因此,值得检查config.ymlconfig_dev.ymlconfig_prod.yml

答案 4 :(得分:1)

您使用的是像uglify这样的过滤器吗?

如果是这种情况,Assetic会引发此错误,因为该进程存在代码127,这意味着节点可执行文件无法运行。

检查config.yml中的路径:

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

确保它是可执行的:

chmod +x /path/to/uglifyjs

答案 5 :(得分:0)

只需进行作曲家更新(php composer.phar更新),然后尝试转储您的资源。 它可能无法在第一次运行,因此请再次更新作曲家。