所以我在安装新的 gem 时似乎总是会收到错误消息。我对 Ruby、Rails 和 RubyGems 都不熟悉,所以这很令人沮丧。我不确定我是否需要配置某些东西,或者我是否安装不正确……所以希望你能帮忙。以下是我遇到的一些问题示例:
#1:使用 sudo 与不使用 sudo
在大量的教程/文档中他们总是使用:
gem install gem-name
对我来说,这几乎总是会导致某种错误......直到我这样做......
sudo gem install gem-name
...然后 gem 通常可以正常安装。为什么人们gem install
不用 就可以运行sudo
?
解决方案:
安装 Ruby 版本管理器!
说真的!我希望早点这样做。Ruby 版本管理器可以运行多个版本的 Ruby,每个版本都有自己的 gem 集,并且可以无缝地在不同版本之间切换。另外,您不必再使用任何版本sudo
。另外,它非常容易安装,所以您应该这样做!
#2:“找不到头文件”
有时我会收到这样的消息,即使在sudo
...下运行时也是如此。
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h
那有什么意思?
解决方案:
问题是它找不到 make 命令。它是在安装 XCode 时自动安装的。出于某种原因,尽管我安装了 XCode,但它找不到它。我下载了最新版本的 XCode并重新安装。现在当我运行which make
它时,它会正确返回/usr/bin/make
。
使用 Lion 和新版本的 Xcode,从以下位置下载“Xcode 命令行工具”https://developer.apple.com/downloads。
#3:“不安全的世界可写目录”
这是一个新的。
/Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/source.rb:352: warning: Insecure world writable dir /usr/local/bin in PATH, mode 040777
这看起来不太好。我需要做什么来修复它?
解决方案:
/usr/local/bin
我安装的某些东西在某个时间点更改了我的目录(以及我的/usr/local
和目录)的权限/usr/local/mysql
。要将其改回:
sudo chmod 755 /usr/local/bin
#4:无法安装 bcrypt-ruby
最后,我尝试运行bundle install
我的全新 Rails 3.0.0.beta4 应用程序,但出现以下错误:
Installing bcrypt-ruby (2.1.2) from .gem files at /Users/andrew/.bundle/ruby/1.8/cache with native extensions /Library/Ruby/Site/1.8/rubygems/installer.rb:483:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h
Gem files will remain installed in /Users/andrew/.bundle/ruby/1.8/gems/bcrypt-ruby-2.1.2 for inspection.
Results logged to /Users/andrew/.bundle/ruby/1.8/gems/bcrypt-ruby-2.1.2/ext/mri/gem_make.out
from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `each'
from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `build_extensions'
from /Library/Ruby/Site/1.8/rubygems/installer.rb:198:in `install'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/source.rb:170:in `install'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/installer.rb:34:in `run'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/spec_set.rb:12:in `each'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/spec_set.rb:12:in `each'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/installer.rb:21:in `run'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/installer.rb:6:in `install'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/cli.rb:91:in `install'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/task.rb:33:in `send'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/task.rb:33:in `run'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/invocation.rb:109:in `invoke'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/invocation.rb:116:in `call'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/invocation.rb:116:in `invoke'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor.rb:137:in `start'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor/base.rb:378:in `start'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/lib/bundler/vendor/thor.rb:124:in `start'
from /Library/Ruby/Gems/1.8/gems/bundler-0.9.26/bin/bundle:13
from /usr/bin/bundle:19:in `load'
from /usr/bin/bundle:19
它似乎bcrypt-ruby
正在尝试安装某种依赖项。那么我该如何让它工作呢?我怎么知道它失败的原因?
解决方案:
通过重新安装 XCode 解决了这个问题。
抱歉,我列出了这么多问题,但我真的想摆脱所有这些问题!
提前致谢!
答案1
由于我只能回答部分问题,因此最好将其作为单独的问题。
sudo
- 在 OS X 上,gems 安装在 下的目录中/Library
。此处的任何内容都由 Mac 上的所有用户共享,因此要能够写入它,您需要 root 访问权限,而 sudo 会为您提供该访问权限。
当人们快速解释事情(因为他们希望人们知道何时使用 sudo)或他们已设置 ruby 以按照以下说明安装在用户目录中时,您会看到没有 sudo 的命令Ruby 文档和 4.:找不到 ruby 的头文件。
我怀疑您没有安装 XCode,即 Apple 开发人员工具。它们位于您的 OS X DVD 上,或者可以从以下位置下载苹果如果您使用的是 OS X Lion,则请访问 App Store。/usr/local/bin
- 很糟糕。
运行/Applications/Utilities/Disk Utility.app
,选择启动驱动器并修复权限。
答案2
我建议安装Ruby 版本管理器,并且不用担心sudo问题,并且可以轻松地在不同的ruby版本和gem集之间切换。
答案3
回复#4:
如果你缺少 XCode 并且有 Apple 开发者账户,你也可以只安装命令行工具(约 180MB) - 下载可在 ADC 网站上查看。
答案4
权限错误的原因是因为你没有以root用户身份登录终端。
如果你已经拥有 root 权限,请在 Mac 的终端类型中启用该功能(不带 $)
$ su
如果你没有 root 用户,则需要使用以下步骤启用它
- 从 Apple 菜单中,选择系统偏好设置...
- 从查看菜单中选择用户和组。
- 单击锁并以管理员帐户身份进行身份验证。
- 单击“登录选项…”。
- 单击右下角的“编辑...”或“加入...”按钮。
- 单击“打开目录实用程序...”按钮。
- 单击“目录实用程序”窗口中的锁。
- 输入管理员帐户名和密码,然后单击“确定”。
- 从编辑菜单中选择启用 Root 用户。
- 在密码和验证字段中输入您想要使用的根密码,然后单击确定。
更多内容http://support.apple.com/kb/ht1528
至少在我被困了几个小时之后它还是有用的。