- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试找出全局安装 StriderCD 的最佳方法。我通过 global-enabled fork of nvm 安装了 node 和 npm ,并且所有路径都适用于其他构建,但它们都不需要像这样的后期安装。
我已经尝试过 sudo npm install -g strider
以及不使用 sudo 以 root 身份安装,但我总是在 .config 和 .cache 上遇到 EACCESS
错误安装后步骤中 bower 的文件夹:
> strider@1.6.6 postinstall /usr/local/lib/node_modules/strider
> bower install --allow-root && npm run build
/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/mkdirp/index.js:89
throw err0;
^
Error: EACCES, permission denied '/home/ubuntu/.config'
以 root 身份安装,root 对其自己的 $HOME 目录没有权限,这很奇怪,除非 bower 正在创建具有错误权限的目录和文件。谁能解释一下:
> strider@1.6.6 postinstall /usr/local/lib/node_modules/strider
> bower install --allow-root && npm run build
/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/configstore/index.js:56
throw err;
^
Error: EACCES, permission denied '/root/.config/configstore/bower-github.yml'
You don't have access to this file.
at Error (native)
at Object.fs.openSync (evalmachine.<anonymous>:500:18)
at Object.fs.readFileSync (evalmachine.<anonymous>:352:15)
at Object.create.all.get (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/configstore/index.js:34:29)
at Object.Configstore (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/configstore/index.js:27:44)
at readCachedConfig (/usr/local/lib/node_modules/strider/node_modules/bower/lib/config.js:22:23)
at defaultConfig (/usr/local/lib/node_modules/strider/node_modules/bower/lib/config.js:11:24)
at Object.<anonymous> (/usr/local/lib/node_modules/strider/node_modules/bower/lib/index.js:40:32)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
使用 sudo 作为 ubuntu 用户并尝试 chmod -R 777 $HOME/.config
我在 $HOME/.cache
上得到了同样的结果!叹息。
> strider@1.6.6 postinstall /usr/local/lib/node_modules/strider
> bower install --allow-root && npm run build
bower EACCES EACCES, permission denied '/home/ubuntu/.cache/bower/registry/bower.herokuapp.com/lookup'
Stack trace:
Error: EACCES, permission denied '/home/ubuntu/.cache/bower/registry/bower.herokuapp.com/lookup'
at Error (native)
at Object.fs.mkdirSync (fs.js:747:18)
at Function.sync (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/node_modules/mkdirp/index.js:55:12)
at new Cache (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/lib/util/Cache.js:21:16)
at RegistryClient.<anonymous> (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/lib/lookup.js:163:35)
at Array.forEach (native)
at RegistryClient.initCache (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/lib/lookup.js:150:34)
at RegistryClient._initCache (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/Client.js:62:27)
at new RegistryClient (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-registry-client/Client.js:16:10)
at new PackageRepository (/usr/local/lib/node_modules/strider/node_modules/bower/lib/core/PackageRepository.js:17:28)
Console trace:
Error
at StandardRenderer.error (/usr/local/lib/node_modules/strider/node_modules/bower/lib/renderers/StandardRenderer.js:82:37)
at Logger.<anonymous> (/usr/local/lib/node_modules/strider/node_modules/bower/bin/bower:110:22)
at Logger.emit (events.js:107:17)
at Logger.emit (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/bower-logger/lib/Logger.js:29:39)
at /usr/local/lib/node_modules/strider/node_modules/bower/lib/commands/index.js:45:20
at _rejected (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:844:24)
at /usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:870:30
at Promise.when (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:1122:31)
at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:788:41)
at /usr/local/lib/node_modules/strider/node_modules/bower/node_modules/q/q.js:556:49
System info:
Bower version: 1.4.1
Node version: 0.12.4
OS: Linux 3.13.0-48-generic x64
当我使用 --global
并且还使用 sudo 安装时,为什么 bower 坚持使用 $HOME/.config
?有没有办法将其映射到不同的路径并使权限正确?当我 su root -l
安装时,为什么 root 没有权限访问文件或在它自己的 $HOME
和/或 $HOME/中创建目录.config
?非常困惑。
这是在全新更新的 14.04 LTS AWS 实例上。此错误的根本原因是什么,是我的设置导致问题还是 Bower 或 Strider 的配置错误?
最佳答案
你的文件系统的权限看起来确实很奇怪,应该调查和修复。
也就是说,第一个堆栈跟踪的重要部分是 configstore ,一种用于将数据缓存或持久保存到磁盘的机器。不用说它会尝试写入这些位置。这是一个开始的地方。
较新的 conf 的常见问题解答中提到了权限问题模块,虽然它似乎不适用于 Linux。
In configstore, the config is stored in ~/.config (which is mainly a Linux convention) on all systems, while conf stores config in the system default user config directory. The ~/.config directory, it turns out, often have an incorrect permission on macOS and Windows, which has caused a lot of grief for users.
切换到 conf
会解决问题吗?也许,也许不是。不能伤害到 file an issue .这是一个非常微不足道的替代品。您当然可以在 node_modules
内部进行修改,以验证是否可以为您解决问题。
两者configstore和 conf尊重 XDG_CONFIG_HOME
环境变量。但是他们阅读的时间略有不同,前者在模块 require()
时间,后者在其类被实例化时。
我们还应该挑战进程以特定用户 (root
) 运行的假设,因为 Node 程序可以process.setuid()这在命令行工具中比较常见。
我会修改正在运行的各种 node_modules
文件并添加一些...
console.log('User:', process.getuid());
console.log('Group:', process.getgid());
console.log('Effective user:', process.geteuid());
console.log('Effective group:', process.getegid());
这很有用,因为 bower
或 npm
可能会在不方便的时候降级权限。或者也许 npm run build
脚本中的某些东西正在这样做。
如果您看到用户或组在程序的整个生命周期中发生变化,那么这是一个很容易出现错误的区域。仔细检查打印的用户或组是否具有对失败路径的完全访问权限。根据正在进行的具体事件,可能需要对父目录具有执行 (x
) 权限,直至文件系统的根目录。
关于node.js - StriderCD 全局安装后在 bower 访问 $HOME/.config $HOME/.cache 时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30582124/
我正在尝试找出全局安装 StriderCD 的最佳方法。我通过 global-enabled fork of nvm 安装了 node 和 npm ,并且所有路径都适用于其他构建,但它们都不需要像这样
我是一名优秀的程序员,十分优秀!