“不要以root身份运行bundler” – 使用root所产生的确切差异是什么?

如果以root身份登录时从命令行运行ruby bundler,则会收到以下警告:

不要以root身份运行Bundler。 如果需要,Bundler可以请求sudo,并且以root身份安装捆绑包将破坏此计算机上所有非root用户的应用程序。

以root身份运行bundler对它安装的gem有什么区别?

是否与为每个gem安装的实际文件的权限有关? Ruby会尝试以非root用户身份访问gem文件(如果是这样,Ruby将使用哪个用户/组以及如何查找)?

由于bundle用作root用户而导致应用程序崩溃的症状是什么?


我问的具体原因是因为我试图在一个非常基本的Centos VPS上使用bundler,我不需要设置任何非root用户。 我遇到了通过bundler安装gems的其他问题 ( Error: file to import not found or unreadable: gemname尽管gem list中存在有问题的gem list ,但是我想知道是否通过Bundler以root身份安装gem可能有使文件对Ruby不可读。

我想解决这个问题,如果我确实需要设置一个纯粹用于运行bundler的非root用户帐户,如果我这样做,那么这个用户需要哪些组和权限才能允许Ruby运行gems bundler安装。

或者我可以只是chownchgrpgem文件夹? 如果是这样,它是否依赖于与Ruby的安装方式有关? (我使用RVM和我的gem最终在/usr/local/rvm/gems/由root rvm中的root拥有) 这个松散相关的问题的答案暗示了Ruby的安装方式的未指定方面会影响bundler的权限要求 。

研究“不要以root身份运行捆绑包”消息只会出现一个未回答的问题和抱怨,这个警告显然“就像它说要在晚上8点睡觉”(链接包含NSFW语言) 。

所以我不得不深入研究bundler的repo的git log历史,因为GitHub 不再允许在git提交消息中进行搜索 。

提交c1b3fd165b2ec97fb254a76eaa3900bc4857a357说:

在root运行bundler时打印警告。 当用户使用sudo捆绑器运行捆绑安装时,将打印警告,让他们知道可能的后果。

关闭#2936

阅读本期,您了解不应该使用root用户的真正原因:

对于试图将OS X上的gem安装到系统gem中的用户来说,运行sudo bundle install会导致巨大的级联问题。 我们应该打印一个警告并解释Bundler会在需要时提示sudo。 我们还应该警告人们sudo bundle会破坏git gem,因为它们必须由Bundler运行的用户写入。

对于RBENV用户。 我刚刚为自己解决了这个问题。 您很可能正在使用usr捆绑器。 通过键入gem list bundler来validation这一点

如果出现空白,则需要为rbenv via安装bundler

gem install bundler --no-ri --no-rdoc

重新加载CLI,您现在应该可以在没有sudo的情况下运行bundle。