Ich habe ein thor-basiertes Ruby-Skript, aber ich möchte es als ein Juwel in den bin
-Verzeichnissen von Leuten einsetzen, die Leute treffen können, ohne thor mytool
zu tun.Möglich, ausführbares Thor-powered-Skript ohne Aufruf von thor aufzurufen?
Anstatt also würden sie verwenden nur mytool
Ist das möglich?
Ich weiß, es ist möglich mit Vanille optparse
, aber ich würde lieber Thor wenn möglich verwenden.
Update: Dies ist der Code, den ich auf der Thor-Seite auf dem Beispiel basiert bin mit, aber ich habe den Fehler unten:
#!/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
Fehler:
/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
Das funktioniert großartig. Zusammenfassung: Rufen Sie die Datei wie auch immer auf, machen Sie sie ausführbar, ändern Sie die Bang-Zeile, um Ruby wie oben zu verwenden, fügen Sie App.start zum Ende hinzu. Sieg! –
Wo ist das dokumentiert? Ich musste im ganzen Netz nach Beispielen suchen, um den Shebang-Start-Trick herauszufinden. –
Es ist nicht wirklich. Der Shebang ist die Standardmethode zum Erstellen ausführbarer Skripts. Die Klassenmethode "start", die in Ihre Thor-Unterklasse eingemischt wird, ist unter http://rdoc.info/gems/thor/0.14.6/Thor/Base/ClassMethods:start dokumentiert. Ich stimme im Allgemeinen zu, dass Thors Dokumentation ein wenig unpassend ist. – Simon