捆绑器未加载宝石 [英] Bundler isn't loading gems
问题描述
我一直在使用Bundler时遇到问题,并且能够访问我的gem而不需要将它们放在某个地方,因为 config.gem
曾经为我做过(我所知道的)。在我的Rails 3应用中,我这样定义了 Gemfile
:
I have been having a problem with using Bundler and being able to access my gems without having to require them somewhere, as config.gem
used to do that for me (as far as I know). In my Rails 3 app, I defined my Gemfile
like so:
clear_sources
source "http://gemcutter.org"
source "http://gems.github.com"
bundle_path "vendor/bundler_gems"
## Bundle edge rails:
git "git://github.com/rails/arel.git"
git "git://github.com/rails/rack.git"
gem "rails", :git => "git://github.com/rails/rails.git"
## Bundle
gem "mongo_mapper", :git => "git://github.com/jnunemaker/mongomapper.git"
gem "bluecloth", ">= 2.0.0"
然后我运行 gem bundle
,它像预期的那样将其全部捆绑在一起。在 boot.rb
包含的 environment.rb
文件中,它看起来像这样:
Then I run gem bundle
, it bundles it all up like expected. Inside the environment.rb
file that is included within boot.rb
it looks like this:
# DO NOT MODIFY THIS FILE
module Bundler
file = File.expand_path(__FILE__)
dir = File.dirname(file)
ENV["PATH"] = "#{dir}/../../../../bin:#{ENV["PATH"]}"
ENV["RUBYOPT"] = "-r#{file} #{ENV["RUBYOPT"]}"
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/builder-2.1.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/builder-2.1.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/text-hyphen-1.0.0/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/text-hyphen-1.0.0/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/i18n-0.3.3/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/i18n-0.3.3/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/arel/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/arel/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activemodel/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activemodel/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/jnunemaker-validatable-1.8.1/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/jnunemaker-validatable-1.8.1/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/abstract-1.0.0/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/abstract-1.0.0/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/erubis-2.6.5/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/erubis-2.6.5/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/mime-types-1.16/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/mime-types-1.16/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/mail-2.1.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/mail-2.1.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rake-0.8.7/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rake-0.8.7/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/railties/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/railties/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/memcache-client-1.7.7/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/memcache-client-1.7.7/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rack/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rack/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-test-0.5.3/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-test-0.5.3/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-mount-0.4.5/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/rack-mount-0.4.5/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/actionpack/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/actionpack/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/bluecloth-2.0.7/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/bluecloth-2.0.7/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/bluecloth-2.0.7/ext")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activerecord/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activerecord/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/text-format-1.0.0/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/text-format-1.0.0/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/actionmailer/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/actionmailer/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/tzinfo-0.3.16/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/tzinfo-0.3.16/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activesupport/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activesupport/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activeresource/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/activeresource/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/rails/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/mongo-0.18.2/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/gems/mongo-0.18.2/lib")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/mongomapper/bin")
$LOAD_PATH.unshift File.expand_path("#{dir}/dirs/mongomapper/lib")
@gemfile = "#{dir}/../../../../Gemfile"
require "rubygems" unless respond_to?(:gem) # 1.9 already has RubyGems loaded
@bundled_specs = {}
@bundled_specs["builder"] = eval(File.read("#{dir}/specifications/builder-2.1.2.gemspec"))
@bundled_specs["builder"].loaded_from = "#{dir}/specifications/builder-2.1.2.gemspec"
@bundled_specs["text-hyphen"] = eval(File.read("#{dir}/specifications/text-hyphen-1.0.0.gemspec"))
@bundled_specs["text-hyphen"].loaded_from = "#{dir}/specifications/text-hyphen-1.0.0.gemspec"
@bundled_specs["i18n"] = eval(File.read("#{dir}/specifications/i18n-0.3.3.gemspec"))
@bundled_specs["i18n"].loaded_from = "#{dir}/specifications/i18n-0.3.3.gemspec"
@bundled_specs["arel"] = eval(File.read("#{dir}/specifications/arel-0.2.pre.gemspec"))
@bundled_specs["arel"].loaded_from = "#{dir}/specifications/arel-0.2.pre.gemspec"
@bundled_specs["activemodel"] = eval(File.read("#{dir}/specifications/activemodel-3.0.pre.gemspec"))
@bundled_specs["activemodel"].loaded_from = "#{dir}/specifications/activemodel-3.0.pre.gemspec"
@bundled_specs["jnunemaker-validatable"] = eval(File.read("#{dir}/specifications/jnunemaker-validatable-1.8.1.gemspec"))
@bundled_specs["jnunemaker-validatable"].loaded_from = "#{dir}/specifications/jnunemaker-validatable-1.8.1.gemspec"
@bundled_specs["abstract"] = eval(File.read("#{dir}/specifications/abstract-1.0.0.gemspec"))
@bundled_specs["abstract"].loaded_from = "#{dir}/specifications/abstract-1.0.0.gemspec"
@bundled_specs["erubis"] = eval(File.read("#{dir}/specifications/erubis-2.6.5.gemspec"))
@bundled_specs["erubis"].loaded_from = "#{dir}/specifications/erubis-2.6.5.gemspec"
@bundled_specs["mime-types"] = eval(File.read("#{dir}/specifications/mime-types-1.16.gemspec"))
@bundled_specs["mime-types"].loaded_from = "#{dir}/specifications/mime-types-1.16.gemspec"
@bundled_specs["mail"] = eval(File.read("#{dir}/specifications/mail-2.1.2.gemspec"))
@bundled_specs["mail"].loaded_from = "#{dir}/specifications/mail-2.1.2.gemspec"
@bundled_specs["rake"] = eval(File.read("#{dir}/specifications/rake-0.8.7.gemspec"))
@bundled_specs["rake"].loaded_from = "#{dir}/specifications/rake-0.8.7.gemspec"
@bundled_specs["railties"] = eval(File.read("#{dir}/specifications/railties-3.0.pre.gemspec"))
@bundled_specs["railties"].loaded_from = "#{dir}/specifications/railties-3.0.pre.gemspec"
@bundled_specs["memcache-client"] = eval(File.read("#{dir}/specifications/memcache-client-1.7.7.gemspec"))
@bundled_specs["memcache-client"].loaded_from = "#{dir}/specifications/memcache-client-1.7.7.gemspec"
@bundled_specs["rack"] = eval(File.read("#{dir}/specifications/rack-1.1.0.gemspec"))
@bundled_specs["rack"].loaded_from = "#{dir}/specifications/rack-1.1.0.gemspec"
@bundled_specs["rack-test"] = eval(File.read("#{dir}/specifications/rack-test-0.5.3.gemspec"))
@bundled_specs["rack-test"].loaded_from = "#{dir}/specifications/rack-test-0.5.3.gemspec"
@bundled_specs["rack-mount"] = eval(File.read("#{dir}/specifications/rack-mount-0.4.5.gemspec"))
@bundled_specs["rack-mount"].loaded_from = "#{dir}/specifications/rack-mount-0.4.5.gemspec"
@bundled_specs["actionpack"] = eval(File.read("#{dir}/specifications/actionpack-3.0.pre.gemspec"))
@bundled_specs["actionpack"].loaded_from = "#{dir}/specifications/actionpack-3.0.pre.gemspec"
@bundled_specs["bluecloth"] = eval(File.read("#{dir}/specifications/bluecloth-2.0.7.gemspec"))
@bundled_specs["bluecloth"].loaded_from = "#{dir}/specifications/bluecloth-2.0.7.gemspec"
@bundled_specs["activerecord"] = eval(File.read("#{dir}/specifications/activerecord-3.0.pre.gemspec"))
@bundled_specs["activerecord"].loaded_from = "#{dir}/specifications/activerecord-3.0.pre.gemspec"
@bundled_specs["text-format"] = eval(File.read("#{dir}/specifications/text-format-1.0.0.gemspec"))
@bundled_specs["text-format"].loaded_from = "#{dir}/specifications/text-format-1.0.0.gemspec"
@bundled_specs["actionmailer"] = eval(File.read("#{dir}/specifications/actionmailer-3.0.pre.gemspec"))
@bundled_specs["actionmailer"].loaded_from = "#{dir}/specifications/actionmailer-3.0.pre.gemspec"
@bundled_specs["tzinfo"] = eval(File.read("#{dir}/specifications/tzinfo-0.3.16.gemspec"))
@bundled_specs["tzinfo"].loaded_from = "#{dir}/specifications/tzinfo-0.3.16.gemspec"
@bundled_specs["activesupport"] = eval(File.read("#{dir}/specifications/activesupport-3.0.pre.gemspec"))
@bundled_specs["activesupport"].loaded_from = "#{dir}/specifications/activesupport-3.0.pre.gemspec"
@bundled_specs["activeresource"] = eval(File.read("#{dir}/specifications/activeresource-3.0.pre.gemspec"))
@bundled_specs["activeresource"].loaded_from = "#{dir}/specifications/activeresource-3.0.pre.gemspec"
@bundled_specs["rails"] = eval(File.read("#{dir}/specifications/rails-3.0.pre.gemspec"))
@bundled_specs["rails"].loaded_from = "#{dir}/specifications/rails-3.0.pre.gemspec"
@bundled_specs["mongo"] = eval(File.read("#{dir}/specifications/mongo-0.18.2.gemspec"))
@bundled_specs["mongo"].loaded_from = "#{dir}/specifications/mongo-0.18.2.gemspec"
@bundled_specs["mongo_mapper"] = eval(File.read("#{dir}/specifications/mongo_mapper-0.6.10.gemspec"))
@bundled_specs["mongo_mapper"].loaded_from = "#{dir}/specifications/mongo_mapper-0.6.10.gemspec"
def self.add_specs_to_loaded_specs
Gem.loaded_specs.merge! @bundled_specs
end
def self.add_specs_to_index
@bundled_specs.each do |name, spec|
Gem.source_index.add_spec spec
end
end
add_specs_to_loaded_specs
add_specs_to_index
def self.require_env(env = nil)
context = Class.new do
def initialize(env) @env = env && env.to_s ; end
def method_missing(*) ; yield if block_given? ; end
def only(*env)
old, @only = @only, _combine_only(env.flatten)
yield
@only = old
end
def except(*env)
old, @except = @except, _combine_except(env.flatten)
yield
@except = old
end
def gem(name, *args)
opt = args.last.is_a?(Hash) ? args.pop : {}
only = _combine_only(opt[:only] || opt["only"])
except = _combine_except(opt[:except] || opt["except"])
files = opt[:require_as] || opt["require_as"] || name
files = [files] unless files.respond_to?(:each)
return unless !only || only.any? {|e| e == @env }
return if except && except.any? {|e| e == @env }
if files = opt[:require_as] || opt["require_as"]
files = Array(files)
files.each { |f| require f }
else
begin
require name
rescue LoadError
# Do nothing
end
end
yield if block_given?
true
end
private
def _combine_only(only)
return @only unless only
only = [only].flatten.compact.uniq.map { |o| o.to_s }
only &= @only if @only
only
end
def _combine_except(except)
return @except unless except
except = [except].flatten.compact.uniq.map { |o| o.to_s }
except |= @except if @except
except
end
end
context.new(env && env.to_s).instance_eval(File.read(@gemfile), @gemfile, 1)
end
end
module Gem
@loaded_stacks = Hash.new { |h,k| h[k] = [] }
def source_index.refresh!
super
Bundler.add_specs_to_index
end
end
但是当我尝试访问我的任何宝石时,例如 MongoMapper
, Paperclip
, Haml
等,我得到:
But when I try to access any of my gems, e.g. MongoMapper
, Paperclip
, Haml
, etc. I get:
NameError: uninitialized constant MongoMapper
其他任何宝石也是如此。 Bundler是否不包括旧的Rails 2.0那样的宝石?还是我的系统弄乱了?
The same goes for any other gem. Does Bundler not include gems like the old Rails 2.0 did? Or is something messed up with my system?
任何帮助将不胜感激,谢谢!
Any help would be appreciated, thank you!
推荐答案
您需要升级到Bundler的最新版本。完成此操作后,通过快速的 gem清理
删除以前的版本,修复Gemfile,然后执行 bundle lock
并然后将以下代码添加到 config / preinitializer.rb
文件:
You need to upgrade to the latest version on Bundler. Once you do that, remove previous versions with a quick gem cleanup
, fix your Gemfile, then do a bundle lock
and then add the following code to the config/preinitializer.rb
file:
begin
# Require the preresolved locked set of gems.
require File.expand_path('../.bundle/environment', __FILE__)
rescue LoadError
# Fallback on doing the resolve at runtime.
require "rubygems"
require "bundler"
Bundler.setup
end
# Auto-require all bundled libraries.
Bundler.require
这篇关于捆绑器未加载宝石的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!