Ruby RubyGems:为什么我在尝试安装 gem 时总是收到错误消息?

And*_*rew 5 osx-snow-leopard ruby rubygems

所以当我安装新的 gem 时,我似乎总是收到错误消息。我是 Ruby、Rails 和 RubyGems 的新手,所以这让我非常沮丧。我不确定我是否需要配置某些东西,或者我是否安装了错误的东西......所以希望你能提供帮助。以下是我遇到的问题的一些示例:

#1:sudo 与不使用 sudo

在大量的教程/文档中,他们总是使用:

gem install gem-name
Run Code Online (Sandbox Code Playgroud)

对我来说,这几乎总是会导致某种错误......直到我这样做......

sudo gem install gem-name
Run Code Online (Sandbox Code Playgroud)

...然后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
Run Code Online (Sandbox Code Playgroud)

那有什么意思?

解决方案:

问题是它找不到make命令。安装 XCode 时它会自动安装。出于某种原因,即使我安装了 XCode,它也找不到它。我下载了最新版本的 XCode并重新安装。现在,当我which make正确运行它时,它会返回/usr/bin/make.

在新版本的 Xcode 中使用 Lion,从https://developer.apple.com/downloads下载“Xcode 命令行工具” 。


#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
Run Code Online (Sandbox Code Playgroud)

那看起来不太好。我需要做什么来修复它?

解决方案:

我安装的东西,在某个时间点,改变了我的/usr/local/bin目录(以及 my/usr/local/usr/local/mysql目录)的权限。要将这些改回:

sudo chmod 755 /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

#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
Run Code Online (Sandbox Code Playgroud)

看起来像是bcrypt-ruby它试图安装的某种依赖项。那么我该如何让它发挥作用呢?我怎么知道它失败的原因?

解决方案:

这是通过重新安装 XCode 修复的。


对不起,洗衣清单,但我真的很想摆脱所有这些问题!

提前致谢!

mmm*_*mmm 2

作为单独的问题会更好,因为我只能回答一些。

\n\n
    \n
  1. sudo- 在 OS X 上,gems 安装在/Library. 这里的任何内容都由 Mac 上的所有用户共享,因此要能够写入它,您需要 root 访问权限,这就是 sudo 为您提供的权限。\n当人们快速解释事情时,您会看到没有 sudo 的命令,因为他们希望人们知道何时使用 sudo,或者他们是否按照Ruby 文档
    将 ruby​​ 安装在用户目录中

  2. \n
  3. 4.:找不到 ruby​​ 的头文件。
    \n我怀疑你没有安装XCode,苹果开发者工具。它们位于您的 OS X\xc2\xa0DVD 上,或者如果您使用的是 OS X Lion,则可以从Apple或 App Store 下载。

  4. \n
  5. /usr/local/bin- 那很不好。
    \n运行/Applications/Utilities/Disk Utility.app,选择启动驱动器和修复权限。

  6. \n
\n