如何使用guard-shell插件正确使用RVM gemsets?

时间:2014-06-13 21:28:55

标签: ruby rvm guard

我试图通过guard-shell运行Ruby脚本。此脚本需要redcarpet gem。当脚本运行时,我得到一个"无法加载这样的文件"错误,表示我预期使用的宝石集实际上没有被使用。

以下是一些相关参数:

  1. 在Guard应用程序文件夹中(Guardfile所在的位置):

    > ls -a
    .                .ruby-gemset   Gemfile     Guardfile
    ..      .ruby-version   Gemfile.lock    tmp1.txt
    > cat .ruby-*
    rails4
    2.1.2
    
  2. 宝石似乎在那里:

    > gem which redcarpet
    /Users/sameer/.rvm/gems/ruby-2.1.2@rails4/extensions/x86_64-darwin-13/2.1.0-static/redcarpet-3.1.2/redcarpet.bundle
    
  3. 我的Guardfile有watch(/(.*)/) {|m| `rvm list; rvm gemset list; gem which redcarpet` },输出:

    ERROR:  Can't find ruby library file or shared library redcarpet
    ERROR:  Can't find ruby library file or shared library redcarpet
    
    rvm rubies
    
    ruby-2.0.0-p353 [ x86_64 ]
    ruby-2.1.0-preview1 [ x86_64 ]
    ruby-2.1.1 [ x86_64 ]
    =* ruby-2.1.2 [ x86_64 ]
    
    # => - current
    # =* - current && default
    #  * - default
    
    gemsets for ruby-2.1.2 (found in /Users/sameer/.rvm/gems/ruby-2.1.2)
    (default)
    global
    => rails4
    
  4. 那么我错过了什么?

1 个答案:

答案 0 :(得分:1)

我得到了同样的错误,例如:

  

./ my_prog.rb:1:in require': cannot load such file -- nokogiri (LoadError) from ./my_prog.rb:1:in'

但是如果我把gemy程序所需的gem放在Gemfile中,那么ruby程序会毫无错误地执行。如果我在Gemfile中注释掉该行,则会再次发生错误。 gem以任何一种方式安装,但是如果它没有在Gemfile中列出,那么guard-shell会产生该错误。

我的Guardfile

guard :shell do
  watch /.*/ do |m|
    puts 'hello'
    `ruby ./my_prog.rb` 
  end
end

我的Gemfile

source 'https://rubygems.org'

group :development do
  gem 'guard', '2.6.1'
  gem 'guard-shell', '0.6.1'
  gem 'nokogiri', '1.6.2.1'
end

my_prog.rb

require 'nokogiri'

puts 'goodbye'

有点烦人,这是我在后卫外壳中的输出:

hellouard(main)> 
goodbye
[1] guard(main)>