Frage

Ich schreibe ein Ruby-Gem, das Benutzer installieren und das Ruby-Befehlszeilentool verwenden können, um mit dem Dienst zu interagieren.Sie können den Dienst starten und stoppen (es wird ein untergeordneter Prozess erzeugt).

Ich habe viel recherchiert, welche Dinge sich am besten zum Schreiben eines Netzwerkdienstes wie ØMQ/EventMachine eignen, und ich weiß, wie man ein Ruby-Gem erstellt, das eine Binärdatei installiert, die Sie in der Befehlszeile verwenden können, aber ich Es fällt mir schwer, eine gute Codestruktur festzulegen.

Mein Befehlszeilenprogramm akzeptiert verschiedene Argumente (ich verwende Schlampe) und es wird verschiedene Klassen verwenden, um Dinge zu tun, und verschiedene andere Rubin-Edelsteine ​​verwenden.

Ich bin mir nicht sicher, wo ich meine Klassendateien ablegen soll und wie ich sie in meiner Binärdatei anfordern soll, damit die Pfade korrekt sind.

War es hilfreich?

Lösung

RubyGems übernimmt dies weitgehend für Sie.Sie müssen Ihre ausführbare Datei in das einfügen files Liste und fügen Sie es in die ein executables in Ihrer Gemspec.Es ist üblich, Ihre ausführbare Datei einzufügen bin in Ihrem Verzeichnis, z.B.:

$ ls
bin/   myapp.gemspec  lib/    Rakefile
$ ls bin
bin/myapp

Ihre Gemspec würde dann so aussehen:

Gem::Specification.new do |s|
  s.name = 'myapp'

  # whatever else is in your gemspec

  s.files = ["bin/myapp","lib/myapp.rb"]  # or whatever other files you want
  s.executables = ["bin/todo"] 
end

Wenn Benutzer Ihre App zu diesem Zeitpunkt über RubyGems installieren, myapp wird ihnen im Weg stehen, und lib befindet sich im Ladepfad Ihrer App, sodass Ihre ausführbare Datei einfach mit Folgendem beginnen kann:

#!/usr/bin/env ruby

require 'myapp'
# whatever other requires

Das einzige Problem dabei ist, dass man es während der Entwicklung nicht einfach so machen kann bin/myapp und lassen Sie Ihre App laufen.Einige Entwickler manipulieren den Ladepfad über $: oder $LOAD_PATH, aber das gilt als schlechte Form.

Wenn Sie Bundler verwenden, ist es am einfachsten, Ihre App einfach lokal damit auszuführen bundle exec, z.B. bundle exec bin/myapp.Alternativ können Sie die verwenden RUBYLIB Umgebungsvariable, z.B. RUBYLIB=lib bin/myapp, was setzen wird lib im Lastpfad.

Andere Tipps

Sie können eine Edelstein-Projektstruktur mit Bundler generieren.

kurz:

Bündler installieren generasacodicetagpre.

Verwenden Sie den Bundler, um das Edelstein-Projekt zu generieren generasacodicetagpre.

Hinzufügen einer ausführbaren Datei generasacodicetagpre.

Installieren Sie Ihr Juwel generasacodicetagpre.

Führen Sie Ihr Skript aus generasacodicetagpre.

Teilen Sie Ihr Dienstprogramm auf rubygems.org generasacodicetagpre.

mehr docs auf die Website

Da alle Edelsteine ​​von Natur aus Open Source sind, können Sie sich jederzeit einige der besseren als Beispiele ansehen.Verwenden Sie einen Edelstein-Builder wie jeweler oder hoe Ich würde Ihnen auch einen Teil der organisatorischen Grundstruktur vermitteln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top