【发布时间】:2014-04-07 12:54:13
【问题描述】:
运行 app/console assetic:dump 时,我得到:
无法解析节点可执行文件的路径
这是什么意思以及如何解决这个问题?
尝试通过 app_dev.php 浏览项目时,当浏览器尝试下载 css 和 js 文件时出现 HTTP 500 错误。
【问题讨论】:
-
你是否在使用需要像 uglify 这样的 node.js 的资产过滤器?
运行 app/console assetic:dump 时,我得到:
无法解析节点可执行文件的路径
这是什么意思以及如何解决这个问题?
尝试通过 app_dev.php 浏览项目时,当浏览器尝试下载 css 和 js 文件时出现 HTTP 500 错误。
【问题讨论】:
首先确保您已安装节点并找到节点的路径。您通常可以使用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
【讨论】:
这对我有用
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
【讨论】:
我在做的时候添加了完全相同的错误
php app/console assetic:dump --env=prod
在 Ubuntu 上,node 和 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
检查 node website 以获取 curl 命令中的正确 url。您可能需要节点 5.X。
当你这样做时
which node
/usr/bin/node
您有正确的二进制名称(node 而不是 nodejs)。
在此之后它应该可以工作。如果不检查 config.yml 中的节点路径(检查 config_prod 和 config_dev 中没有其他声明)
【讨论】:
我发现,即使您在 config.yml 中指定 /usr/bin/node,您仍然可能会发现 Assetic 正在尝试使用 /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 预计下次assetic 失败时节点在哪里。
我发现在我的设置中,assetic 被配置为在 dev 模式下查看 /usr/local/bin,但在 prod 模式下查看 /usr/bin。
所以值得检查config.yml、config_dev.yml和config_prod.yml。
【讨论】:
您是否使用了一些过滤器,例如 uglify ?
如果是这种情况,Assetic 会引发此错误,因为进程存在代码 127,这意味着节点可执行文件无法运行。
检查config.yml 中的路径:
# app/config/config.yml
assetic:
filters:
uglifyjs2:
bin: /path/to/uglifyjs
并确保它是可执行的:
chmod +x /path/to/uglifyjs
【讨论】:
只需更新作曲家(php composer.phar 更新),然后尝试转储您的资产。 第一次可能无法正常工作,请再次更新作曲家。
【讨论】: