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】: 打开您的 bashrc 或 zshrc 文件。 在文件末尾添加eval "$(rbenv init -)"
并保存。
运行 source ~/.zshrc 或 source ~/.bashrc
您也可以关闭和打开终端。 捆绑安装,一切顺利。
【讨论】:
【参考方案9】:如果您使用的是rbenv
,您只需提供一个.ruby-version
文件即可。
【讨论】:
以上是关于Rails:您的用户帐户不允许安装到系统 RubyGems的主要内容,如果未能解决你的问题,请参考以下文章
不允许用户在 ruby on rails 中提交带有空字段的表单
从 Ruby on Rails 多次上传到 Amazon S3 - 使用啥后台处理系统?