2010-08-27 2 views
7

У меня есть скрипт Ruby на основе платформы, но я хочу развернуть его как драгоценный камень в каталогах людей bin, которые могут ударить люди без необходимости делать thor mytool.Можно вызвать исполняемый сценарий Thor-powered без вызова thor?

Так вместо этого они бы просто использовать mytool

возможно ли это?

Я знаю, что это возможно с ванилью optparse, но я предпочел бы использовать Thor, если это возможно.

Update: Это код, я использую на примере на странице Тор, но я получаю ошибку ниже:

#!/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': undefined method `start' for nil:NilClass (NoMethodError) 
     from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/task.rb:22:in `send' 
     from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/task.rb:22:in `run' 
     from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/task.rb:108:in `run' 
     from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/invocation.rb:118:in `invoke_task' 
     from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor.rb:246:in `dispatch' 
     from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/lib/thor/base.rb:389:in `start' 
     from /usr/lib/ruby/gems/1.8/gems/thor-0.14.0/bin/thor:6 
     from /usr/bin/thor:19:in `load' 
     from /usr/bin/thor:19 

ответ

12

Сделать притон линию

#!/usr/bin/env ruby 

, а затем в конце сценария добавить

App.start 
+0

Это отлично работает. Резюме: вызовите файл как угодно, сделайте его исполняемым, измените строку привязки, чтобы использовать Ruby, как указано выше, добавьте App.start в конец. Выиграть! –

+0

Где это задокументировано? Мне пришлось искать примеры по всей сети, чтобы понять трюк с шабангом. –

+2

На самом деле это не так. Shebang - стандартный способ создания исполняемых скриптов. Метод класса «start», который смешивается с вашим подклассом Thor, документируется по адресу http://rdoc.info/gems/thor/0.14.6/Thor/Base/ClassMethods:start. Я согласен, в общем, что документация Тора немного пятнистая. – Simon

0

Сделать исполняемый файл сценария

chmod +x mytool 

и сделать #!/usr/bin/env thor первой строкой в ​​mytool.

+0

Я пробовал это предложение, это было хорошо, но теперь у меня есть ошибка, которую я добавил к вопросу. –

+0

Это, кажется, отдельная проблема, более конкретная для вас код и топор. Возможно, вам стоит открыть новый вопрос, более подходящий для этой новой проблемы? – adamse

1

Вы можете найти это полезным: https://github.com/lastobelus/cleanthor

Я хотел иметь Thor основе исполняемый для драгоценного камня с подкомандами с именами, но организует файлы задач в соответствии с обычным рубиновым камнем lib/mygem/* / .rb.

Смежные вопросы