Rails:您的用户帐户不允许安装到系统 RubyGems

Posted

技术标签:

【中文标题】Rails:您的用户帐户不允许安装到系统 RubyGems【英文标题】:Rails: Your user account isn't allowed to install to the system RubyGems 【发布时间】:2017-08-08 05:02:23 【问题描述】:

我正在运行命令

bundle install

在项目文件夹中。在某些项目文件夹中会产生错误,而在其他项目文件夹中则不会产生错误。错误是:

您的用户帐户不允许安装到系统 RubyGems

我知道这可以通过遵循推荐的建议来解决:

bundle install --path vendor/bundle

我的问题是为什么行为不一致?

【问题讨论】:

我还注意到 Travis CI 运行的正是命令 bundle install --jobs=3 --retry=3 但它实际上隐式安装在 vendor/bundle 中,就像 docs.travis-ci.com/user/languages/ruby/#Default-Test-Script 一样 删除 Gemfile.lock 解决了我的问题 My answer to this question也适用于OP的问题。 【参考方案1】:

通常如果您使用 RVM、rbenv 或 chruby 安装 Ruby,所有的 gem 将安装在您的主文件夹中 ~/.rbenv/ruby-version/...

如果您使用的是系统 Ruby(默认安装的那个),gems 会安装在它旁边的一个位置,如果没有sudo,您将无法访问。

我的猜测是您的版本管理器默认使用系统 Ruby,但您的某些项目中有一个 .ruby-version 文件,告诉它使用您可以访问的不同版本的 Ruby。

【讨论】:

【参考方案2】:

在我的例子中,我有一个现有的$BUNDLE_PATH,但没有足够的权限让捆绑器用户写入。

Your user account isn't allowed to install to the system RubyGems
bundle install --path vendor/bundle

【讨论】:

【参考方案3】:

就我而言,我解决了按照错误消息的建议进行操作:

您的用户帐户不允许安装到系统 RubyGems。 您可以取消此安装并运行: 捆绑安装 --path 供应商/捆绑 将 gem 安装到 ./vendor/bundle/

所以,而不是:

bundle install

我跑了:

bundle install --path vendor/bundle

这就是this guy 的解决方案。

该解决方案的缺点是它在当前文件夹中创建了一个vendor 文件夹,如果要通过Git 分发应用程序,可以将其添加到.gitignore

【讨论】:

如果是Jekyll 静态网站,还要在_config.yml 中的exclude 设置中添加vendor。欲了解更多信息,请参阅:jekyllrb.com/docs/troubleshooting/#configuration-problems【参考方案4】:

使用 RVM:

您必须在$HOME 目录中为您的单用户(标准用户/非root 用户)安装rvm(如果您没有/home/youruser/.rvm 目录,则不安装.

按照“单用户安装位置:~/.rvm/”部分下的 on rvm site 指定,为单用户运行安装 rvm

cd
\curl -sSL https://get.rvm.io | bash -s -- --ignore-dotfiles

现在应该安装rvm。如进一步提示,刷新rvm(提供您的用户名):

source /home/---YOURUSERNAME---/.rvm/scripts/rvm

要防止提示安装 sudo-need 软件包,请运行:

rvm autolibs disable

您只能为您的用户安装 Ruby,版本为 2.5(或任何其他版本,在 rvm list known 中列出)

rvm install 2.5

说明:

您可能尝试使用sudo 和this package for ubuntu 安装rvm,但您没有sudo 权限。

这个提示告诉你不能为整个系统全局捆绑gem, 这可能对您的私人家用机器有好处,但对您的公司用户(机器)却不利,因为它通常由其他人管理。

如果 rvm 将安装在您的 $HOME 中,则宝石将像往常一样捆绑在那里。

行为可能不一致,因为其他用户在其$HOME 目录中安装了rvm

【讨论】:

在 Windows 10 商店的 Ubuntu 18.04 上,您可能需要在所有其他命令之前 sudo apt update & sudo apt upgrade & sudo apt install gnupg2【参考方案5】:

良好的 rbenv 修复

避免使用 sudo 避免安装到供应商/捆绑包

至少对我来说,问题是捆绑器本身没有安装在我的 rbenv ruby​​ 版本中。 即使 bundler 存在并且看起来可用...除了权限错误。

提示我的一件事是,在实际命令行本身我可以正常安装 gems 而不会收到错误消息。我做了一段时间的解决方法,直到我决定永久解决问题,如下所示:

为了解决这个问题,我做了:

rbenv local 2.5.0 # Make sure I'm using a local version that exists
gem list | grep bundler # Note no output! Need to fix that!
gem install bundler
rbenv rehash
bundle (within my project that has a Gem file)

【讨论】:

【参考方案6】:

最近遇到了同样的问题。我用rvm

sudo chown -R $USER ~/.rvm 帮助了我

【讨论】:

【参考方案7】:

我也有类似的经历。我会简单地运行下面的代码来临时修复它

bundle install --path vendor/bundle

这样做的缺点是它不能永久解决问题,因为当您开始使用其他 Ruby on Rails 应用程序时,问题会重新出现。

我尝试了这个解决方案,但它对我不起作用:

显示捆绑器 gem 的所有本地 gem 列表

gem list bundler

N/B:上面的命令是针对 rbenv 版本管理器的,针对 rvm 的命令可能不同

这将显示本地安装的 bundler gem 的版本

bundler (2.0.2, default: 1.17.3, 1.10.6)

然后运行下面的代码卸载版本1.10.6

gem uninstall bundler

之后我运行下面的代码来重新散列 rbenv

rbenv rehash

但是,这并没有解决问题。

我是这样解决的;

问题是我错误地使用管理权限运行了bundle install 操作,即:

sudo bundle install

这使得~/.rbenv OR ~/.rvm 目录的所有者变为root

为了解决这个问题,我运行了下面的代码来更改文件和目录的所有权。

rbenv 用户:

sudo chown -R $USER  ~/.rbenv

对于 RVM 用户

sudo chown -R $USER  ~/.rvm

就是这样。

我希望这会有所帮助

【讨论】:

【参考方案8】: 打开您的 bashrczshrc 文件。 在文件末尾添加eval "$(rbenv init -)"并保存。 运行 source ~/.zshrc 或 source ~/.bashrc

您也可以关闭和打开终端。 捆绑安装,一切顺利。

【讨论】:

【参考方案9】:

如果您使用的是rbenv,您只需提供一个.ruby-version 文件即可。

【讨论】:

以上是关于Rails:您的用户帐户不允许安装到系统 RubyGems的主要内容,如果未能解决你的问题,请参考以下文章

不允许用户在 ruby​​ on rails 中提交带有空字段的表单

通过 RTMP/Rails 录制音频

如何在 Ruby on Rails 中裁剪图像

从 Ruby on Rails 多次上传到 Amazon S3 - 使用啥后台处理系统?

paypal gem 多个帐户 ruby​​ on rails

如何使用 Ruby on Rails 5 将数据从 URL 提取到表单中