我需要从Rails应用程序内部获取gems的完整路径

10

我正在运行一个Rails 3.1应用程序,它使用一个叫做“awesome_engine”的引擎。Awesome_engine有一些资产内容,我需要获取这些内容,但是compass的加载路径不包括引擎的资产路径。我的理解是它应该在那里,但实际上并没有。

我需要添加它,所以我修改了我的config/compass.rb文件,包括compass的additional_import_paths配置设置。问题是,这是我获取所需gem路径的方法:

begin
  gem_root = $LOAD_PATH.find{|i| i.include?('/awesome_engine/')}.gsub(/awesome_engine\/.*/, 'awesome_engine/app/assets/stylesheets/scss')
  additional_import_paths = [gem_root]
rescue
end

这种方法是可行的,但获取宝石完整路径应该有更简单/更好/更干净的方式。有没有其他方法?
1个回答

26

Gem.loaded_specs 是我想要的:

ruby-1.9.2-p290 :001 > Gem.loaded_specs['awesome_engine'].full_gem_path
 => "/Users/younker/dev/engines/awesome_engine" 

ruby-1.9.2-p290 :002 > Gem.loaded_specs['rails'].full_gem_path
 => "/Users/younker/.rvm/gems/ruby-1.9.2-p290@foobar/gems/rails-3.1.3"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接