我试图在rails中使用redis(2.1.1)gem时遇到了问题。我已经解决了这个问题,但我不知道修复程序为什么会起作用,并希望更好地理解。为什么将redis添加到Gemfile中修复错误:require'redis'
我正在使用雪豹。经过很多故障排除之后,我删除了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
当我开始“轨服务器”和加载页面http://localhost:3000/home/index,我收到以下错误信息:
LoadError in HomeController#index
no such file to load -- redis
Rails.root: /Users/Scott/Projects/Rails/myapp
Application Trace | Framework Trace | Full Trace
app/controllers/home_controller.rb:2
This error occurred while loading the following files:
redis
当通过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)>
我发现用我的rails应用程序解决这个问题的唯一方法是将redis添加到Gemfile中。在更改由“rails new myapp”创建的默认Gemfile文件后,我不执行任何其他操作,我只是重新加载页面并且它可以工作。
source 'http://rubygems.org'
gem 'rails', '3.0.5'
gem 'sqlite3'
gem 'redis'
我已经通过这里和其他地方关于为什么需要声明可能会失败,但还没有找到,我已经明白,解释我的情况什么很多类似的问题,阅读。如果它是有帮助的,通过“宝石ENV”返回的宝石路径是:
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
我注意到,这两条路径都以不同的顺序但是/ Users中的路径不包含任何宝石。
任何可以提供的洞察力是值得赞赏的。感谢您阅读这些。
完美。谢谢。了解更多关于Bundler的信息:) – Scott 2011-03-03 13:54:47