8

我有一个基于 thor 的 Ruby 脚本,但我想将它作为一个 gem 部署在人们的bin目录中,人们可以点击而无需执行thor mytool.

所以他们只会使用mytool

这可能吗?

我知道香草有可能,optparse但如果可能的话,我宁愿使用雷神。

更新:这是我根据 Thor 页面上的示例使用的代码,但出现以下错误:

#!/usr/bin/env thor

class App < Thor
  map "-L" => :list

  desc "install APP_NAME", "install one of the available apps"
  method_options :force => :boolean, :alias => :string
  def install(name)
    user_alias = options[:alias]
    if options.force?
      # do something
    end 
    # other code
  end 

  desc "list [SEARCH]", "list all of the available apps, limited by SEARCH"
  def list(search="")
    # list everything
  end 
end

错误:

/usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/runner.rb:34:in `method_missing': nil:NilClass (NoMethodError) 的未定义方法`start'
        来自 /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/task.rb:22:in `send'
        来自 /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/task.rb:22:in `run'
        来自 /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/task.rb:108:in `run'
        来自 /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/invocation.rb:118:in `invoke_task'
        来自 /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor.rb:246:in `dispatch'
        来自 /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/base.rb:389:in `start'
        来自 /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/bin/thor:6
        来自 /usr/bin/thor:19:in `load'
        来自 /usr/bin/thor:19
4

3 回答 3

12

制作shebang线

#!/usr/bin/env ruby

然后在脚本的末尾添加

App.start
于 2010-12-01T14:18:44.303 回答
1

您可能会发现这很有帮助:https ://github.com/lastobelus/cleanthor

我想要一个基于 thor 的 gem 可执行文件,带有命名空间的子命令,但根据正常的 ruby​​ gem lib/mygem/* / .rb 结构组织任务文件。

于 2012-12-07T06:17:29.940 回答
0

使脚本可执行

chmod +x mytool

#!/usr/bin/env thormytool.

于 2010-08-27T14:19:10.210 回答