为什么可执行文件没有加载我的cli文件

时间:2016-12-12 00:39:54

标签: ruby rubygems bundler

我正在关注bundler documentation中的宝石指南。

当我到达命令行部分,我必须在可执行文件上要求'foodie / cli'时,我不断收到错误。

/Users/suyesh/.rbenv/versions/2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- foodie/cli (LoadError)
    from /Users/suyesh/.rbenv/versions/2.3.3/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from exe/foodie:2:in `<main>'

这是我在可执行文件中的代码

#!/usr/bin/env ruby
require 'foodie/cli'

Foodie::CLI.start

这是我的cli,位于lib / foodie / cli.rb

require 'thor'
require 'foodie'


module Foodie
  class CLI < Thor
    desc "portray ITEM", "Determines if a piece of food is gross or sdeliciour."
    def portray(name)
      puts Foodie::Food.portray(name)
    end
  end
end

我做错了什么?

1 个答案:

答案 0 :(得分:0)

根据您调用可执行文件的方式以及路径的设置方式,它应该有效(tm)。

在您的开发环境中使用bundle exec path/to/my/executable(假设您正在编写宝石 - 这几乎总是一个好主意)。如果你按照Bundler教程中的其他步骤进行操作,我相信你应该有一个gemspec文件告诉bundler在哪里寻找([lib /] foodie / cli.rb)。

使用ruby -Iinc/lude/dir/for/example/lib path/to/my/executable告诉您的ruby(暂时)也在目录inc/lude/dir/for/example/lib中查找源文件(在您的情况下是foodie / cli.rb)。既然你正在学习捆绑器,不要使用这种方法,但它可能会让其他人感兴趣,并且在lib-,load-和include-paths存在的区域中投入一些亮点。