如何修复安装Rails时出现的“您没有写入/usr/bin目录的权限”错误?

我正在尝试在一台全新的MacBook Pro上安装Rails 3,它运行的是OS X 10.6.3、Ruby 1.8.7和Rails 2.3.5,我想知道我是否把自己弄脏了。到目前为止,我已经运行了以下命令:

$ gem update --system
$ gem install arel tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n
$ gem install rails --pre

然而,当我运行最后一个命令时,我得到这个错误:

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions into the /usr/bin directory.

我认为它希望我使用sudo运行该命令,以便它可以覆盖/usr/bin/rails。但如果我这样做,我不会覆盖我的Rails 2.3.5可执行文件吗?我不想这么做。相反,我希望保留两个版本的Rails.我该怎么做?

173966 次浏览

我建议使用RVM,它允许您使用gem配置文件安装多个版本的Ruby/Rails,并且基本上使您的所有gem相互包含。您可能想要查看类似的帖子如何在OSX上安装Ruby on Rails 3

要修复特定错误,您需要以sudo的形式运行该命令,即:

sudo gem install rails --pre
在正确安装RVM后,我遇到了

这个错误。 解决方案:重新启动终端.

参考RailsCast的RVM安装教程。

使用-n参数来安装LIKE for CocoaPods:

sudo gem install cocoapods -n /usr/local/bin

您可以使用sudo gem install -n /usr/local/bin cocoapods

这对我有用。

对我来说,一些不同的东西起作用了,我在这个答案中发现了一个类似的问题。可能不会帮助OP,但也许像我这样的人也有类似的问题。

您确实应该使用RVM,但由于没有人向您解释如何在ABC__1__执行此操作,因此您可以:

sudo gem install tzinfo builder memcache-client rack rack-test rack-mount \
abstract erubis activesupport mime-types mail text-hyphen text-format   \
thor i18n rake bundler arel railties rails --prerelease --force
sudo gem install cocoapods --pre -n /usr/local/bin

这对我有用。

使用-n/usr/local/bin标志确实有效,但每次我想再次更新软件包时,都必须返回此页面。所以我想出了一个永久的解决办法。

对于那些对解决此__感兴趣的人,ABC__0:

创建一个~/.gemrc文件

vim .gemrc

内容如下:

:gemdir:
- ~/.gem/ruby
install: -n /usr/local/bin

现在,您可以在没有-n标志的情况下正常运行命令。

享受!

在MacOS High Sierra上,这解决了我的问题:

sudo gem update --system -n /usr/local/bin/gem

问题:在Docker容器上执行一些操作,如bundle installation/npm install,提示缺少权限错误,并阻止用户完成应用任务。默认情况下,Docker容器是“无特权”的。且不允许实现超出范围管理员权能。

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /usr/local/bundle directory.

解决方案:使用--previliged标志启用所有设备,并允许容器对主机进行与主机上容器外部运行的进程几乎相同的访问。注意了在某些情况下,这可能是一个安全问题,建议仅在测试/测试/开发环境中使用。

默认情况下,Docker容器是“无特权”的,例如,不能在Docker容器中运行Docker守护进程。这是因为默认情况下,不允许容器访问任何设备,但“特权”容器可以访问所有设备(请参阅有关cgroups设备的文档)。

当操作员执行docker run --privileged时,Docker将使能 访问主机上的所有设备,并在中设置某些配置 AppArmor或SELinux允许容器几乎所有相同的访问 作为在主机上的容器外部运行的进程。 有关在--privileged下运行的其他信息,请访问 Docker博客.

有关运行时特权和Linux功能的更多内容,请阅读本文档

遵循此答案中的说明对我很有帮助:

https://stackoverflow.com/a/72094586/755451.

从本质上讲,我认为这可以归结为上述步骤:

步骤2:将以下行添加到.zshrc文件中

导出路径=";$HOME/.rbenv/bin:$PATH"; 评估";$(rbenv init-zsh)"; 第3

BREW更新&;&;BREW升级Ruby-Build