Verzeichnis-layout für Reine Ruby-Projekt
-
09-06-2019 - |
Frage
Ich fange an zu lernen ruby.Ich bin auch ein Tag-zu-Tag-C++ - dev.Für C++ - Projekte normalerweise gehe ich mit dir folgende Struktur
/
-/bin <- built binaries
-/build <- build time temporary object (eg. .obj, cmake intermediates)
-/doc <- manuals and/or Doxygen docs
-/src
--/module-1
--/module-2
-- non module specific sources, like main.cpp
- IDE project files (.sln), etc.
Was dir das layout für Ruby (non-Rails, non-Merb) würden Sie vorschlagen zu halten es sauber, einfach und wartbar?
Lösung
Bündler enthalten die notwendige Infrastruktur ein Juwel zu generieren:
$ bundle gem --coc --mit --test=minitest --exe spider
Creating gem 'spider'...
MIT License enabled in config
Code of conduct enabled in config
create spider/Gemfile
create spider/lib/spider.rb
create spider/lib/spider/version.rb
create spider/spider.gemspec
create spider/Rakefile
create spider/README.md
create spider/bin/console
create spider/bin/setup
create spider/.gitignore
create spider/.travis.yml
create spider/test/test_helper.rb
create spider/test/spider_test.rb
create spider/LICENSE.txt
create spider/CODE_OF_CONDUCT.md
create spider/exe/spider
Initializing git repo in /Users/francois/Projects/spider
Gem 'spider' was successfully created. For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html
Dann in lib / erstellen Sie Module je nach Bedarf:
lib/
spider/
base.rb
crawler/
base.rb
spider.rb
require "spider/base"
require "crawler/base"
die Manpage lesen für gem für Details auf dem --coc
zu bündeln, --exe
und --mit
Optionen.
Andere Tipps
Ab 2011 ist es üblich, verwenden Juwelier statt newgem da diese effektiv aufgegeben.
Die Kernstruktur eines Standard-Ruby-Projekt ist im Grunde:
lib/
foo.rb
foo/
share/
foo/
test/
helper.rb
test_foo.rb
HISTORY.md (or CHANGELOG.md)
LICENSE.txt
README.md
foo.gemspec
Die share/
ist selten und manchmal data/
statt genannt wird. Es ist für allgemeine Zwecke nicht-Rubin-Dateien. Die meisten Projekte, die sie nicht brauchen, aber selbst wenn sie alles oft tun, ist nur in lib/
gehalten, obwohl das wahrscheinlich nicht am besten Praxis ist.
Das test/
Verzeichnis könnte spec/
aufgerufen werden, wenn BDD statt TDD verwendet wird, obwohl Sie auch features/
sehen könnten, wenn Gurke verwendet wird, oder wenn demo/
QED verwendet wird.
In diesen Tagen foo.gemspec
kann nur --especially .gemspec
werden, wenn sie nicht von Hand gehalten wird.
Wenn Ihr Projekt Befehlszeile ausführbare Dateien hat, dann fügen Sie:
bin/
foo
man/
foo.1
foo.1.md or foo.1.ronn
Zudem sind die meisten Ruby-Projekt haben:
Gemfile
Rakefile
Die Gemfile
ist für die Verwendung von Bündler und der Rakefile
ist für Rake Build-Tool. Aber es gibt auch andere Möglichkeiten, wenn Sie verschiedene Tools verwenden möchten.
Ein paar andere nicht so ungewöhnlich Dateien:
VERSION
MANIFEST
Die VERSION
Datei enthält nur die aktuelle Versionsnummer. Und die MANIFEST
(oder Manifest.txt
) enthält eine Liste der Dateien in der Projektpaketdatei (en) (zum Beispiel gem Paket) enthalten sein.
Was Sie vielleicht anders sehen, aber Nutzung ist sporadisch:
config/
doc/ (or docs/)
script/
log/
pkg/
task/ (or tasks/)
vendor/
web/ (or site/)
Wo config/
verschiedene Konfigurationsdateien enthält; doc/
enthält entweder erzeugte Dokumentation, z.B. RDoc, oder manchmal manuell gepflegt Dokumentation; script/
enthält Shell-Skripte für die Verwendung durch das Projekt; log/
enthält erzeugten Projektprotokolle, z.B. Testabdeckung Berichte; pkg/
hält Paketdateien erzeugt, z.B. foo-1.0.0.gem
; task/
könnten verschiedene Aufgabendateien wie foo.rake
oder foo.watchr
halten; vendor/
enthält Kopien der anderen Projekte, z.B. GIT Submodule; und schließlich web/
enthält die Website-Dateien des Projekts.
Dann wird einige Werkzeuge, um bestimmte Dateien, die auch relativ häufig sind:
.document
.gitignore
.yardopts
.travis.yml
Sie sind ziemlich selbsterklärend.
Schließlich will ich hinzufügen, dass ich persönlich eine .index
-Datei und ein var/
Verzeichnis fügen Sie diese Datei (Suche nach „Rubyworks Indexer“ für mehr darüber) zu bauen und hat oft ein work
Verzeichnis, so etwas wie:
work/
NOTES.md
consider/
reference/
sandbox/
Gerade Art ein scrapyard für Entwicklungszwecke.
Dentharg : Ihre „schließen ein, um alle Unterteile“ ist ein gemeinsames Muster. Wie alles, hat es seine Vorteile (leicht, die Dinge, die Sie wollen) und seine Nachteile (die viele enthält Namensraum verschmutzen können, und Sie haben keine Kontrolle über sie). Ihr Muster sieht wie folgt aus:
- src/
some_ruby_file.rb:
require 'spider'
Spider.do_something
+ doc/
- lib/
- spider/
spider.rb:
$: << File.expand_path(File.dirname(__FILE__))
module Spider
# anything that needs to be done before including submodules
end
require 'spider/some_helper'
require 'spider/some/other_helper'
...
Ich könnte dies empfehlen, ein wenig mehr Kontrolle zu ermöglichen:
- src/
some_ruby_file.rb:
require 'spider'
Spider.include_all
Spider.do_something
+ doc/
- lib
- spider/
spider.rb:
$: << File.expand_path(File.dirname(__FILE__))
module Spider
def self.include_all
require 'spider/some_helper'
require 'spider/some/other_helper'
...
end
end
Warum nicht einfach das gleiche Layout verwenden? Normalerweise werden nicht benötigen Sie zu bauen, weil es keine Kompilierung Schritt ist, aber der Rest scheint in Ordnung für mich.
Ich bin nicht sicher, was Sie von einem Modul bedeuten, aber wenn es nur eine einzige Klasse ist ein separater Ordner wäre nicht notwendig, und wenn es mehr als eine Datei ist Sie in der Regel eine Modul-1.rb Datei schreiben (auf dem Namen Ebene als Modul-1-Ordner), die nichts mehr als alles in Modul-1 /.
Oh, und ich würde vorschlagen, mit Rake für die Verwaltungsaufgaben (statt make).
Ich würde halten Sie sich an etwas Ähnliches, was Sie kennen: Es gibt keinen Sinn, ein Fremder in Ihrem eigenen Projektverzeichnis zu sein. : -)
Typische Dinge, die ich immer haben, sind lib |. Src, ist, test
(Ich mag nicht diese Monster Generatoren:.! Das erste, was ich mit einem neuen Projekt tun mag, ist einigen Code bekommt nach unten, schreiben Sie nicht eine Readme, Dokumente, etc.)
Also ging ich mit newgem. Ich entfernte alle unnötigen RubyForge / gem stuff (Hacke, Setup, etc.), erstellt git Repo, importierte Projekt in NetBeans. Alle dauerte 20 Minuten und alles ist auf grün. Das gab mir sogar eine grundlegende Rake Aufgabe für spec-Dateien.
Vielen Dank.