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?

War es hilfreich?

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.

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