Ruby on rails 为什么将redis添加到Gemfile会修复以下错误:require';redis';

Ruby on rails 为什么将redis添加到Gemfile会修复以下错误:require';redis';,ruby-on-rails,ruby,rubygems,redis,Ruby On Rails,Ruby,Rubygems,Redis,我在尝试将redis(2.1.1)gem与rails一起使用时遇到问题。我已经修复了这个问题,但我不知道为什么修复会起作用,我想更好地理解 我用的是雪豹。经过多次故障排除,我删除了Ruby、Rails和RubyGems的版本,然后使用MacPorts安装Ruby 1.8.7补丁级别334和RubyGems 1.6.0。Rails现在是3.0.5版的新安装。使用“which-a”表明路径中只有一个版本的ruby和gem 我创建了一个新的rails应用程序,并添加了一个简单的控制器,代码如下: re

我在尝试将redis(2.1.1)gem与rails一起使用时遇到问题。我已经修复了这个问题,但我不知道为什么修复会起作用,我想更好地理解

我用的是雪豹。经过多次故障排除,我删除了Ruby、Rails和RubyGems的版本,然后使用MacPorts安装Ruby 1.8.7补丁级别334和RubyGems 1.6.0。Rails现在是3.0.5版的新安装。使用“which-a”表明路径中只有一个版本的ruby和gem

我创建了一个新的rails应用程序,并添加了一个简单的控制器,代码如下:

require 'rubygems'
require 'redis'

class HomeController < ApplicationController
  def index
    redis = Redis.new
    redis.set "mykey", "myvalue"
  end
end
通过irb使用redis gem时不会发生此错误

~/Projects/Rails/myapp Scott $ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'redis'
=> true
irb(main):003:0> r = Redis.new
=> #<Redis client v2.1.1 connected to redis://127.0.0.1:6379/0 (Redis v2.2.1)>
我在这里和其他地方读过许多类似的问题,关于require语句可能失败的原因,但没有找到任何我理解的解释我的情况的东西。如果有帮助,“gem env”返回的gem路径是:

Ruby似乎使用了相同的路径:

~/Projects/Rails/armatree Scott $ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> puts Gem.path
/Users/Scott/.gem/ruby/1.8
/opt/local/lib/ruby/gems/1.8
=> nil
我注意到这两条路径的顺序不同,但是/Users中的路径不包含任何gem


如能提供任何见解,我们将不胜感激。感谢您阅读本文。

Bundler禁用系统gems,仅使gem文件中列出的gems(及其依赖项)可供应用程序使用。这就是为什么你的应用程序需要的任何gem都应该在gem文件中的原因

另外值得注意的是,bundler需要宝石,除非您告诉它不要。因此,一旦你告诉它在Gemfile中使用redis gem,你就不需要在应用程序的其他地方使用它

source 'http://rubygems.org'

gem 'rails', '3.0.5'
gem 'sqlite3'
gem 'redis'
RubyGems Environment:
  - RUBYGEMS VERSION: 1.6.0
  - RUBY VERSION: 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10]
  - INSTALLATION DIRECTORY: /opt/local/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: /opt/local/bin/ruby
  - EXECUTABLE DIRECTORY: /opt/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-darwin-10
  - GEM PATHS:
     - /opt/local/lib/ruby/gems/1.8
     - /Users/Scott/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/
~/Projects/Rails/armatree Scott $ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> puts Gem.path
/Users/Scott/.gem/ruby/1.8
/opt/local/lib/ruby/gems/1.8
=> nil