문제

루비를 배우기 시작했어요.저는 또한 일상적인 C++ 개발자이기도 합니다.C++ 프로젝트의 경우 일반적으로 다음 디렉토리 구조를 사용합니다.

/
 -/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.

깨끗하고 단순하며 유지 관리가 용이하도록 Ruby(Rails가 아닌, Merb가 아닌)의 어떤 디렉터리 레이아웃을 제안하시겠습니까?

도움이 되었습니까?

해결책

Bundler에는 gem을 생성하는 데 필요한 인프라가 포함되어 있습니다.

$ 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

그런 다음 lib/에서 필요에 따라 모듈을 만듭니다.

lib/
  spider/
    base.rb
  crawler/
    base.rb
  spider.rb
    require "spider/base"
    require "crawler/base"

매뉴얼 페이지를 읽으십시오 번들 보석 자세한 내용은 --coc, --exe 그리고 --mit 옵션.

다른 팁

2011년 현재 일반적으로 사용되는 보석 세공인 newgem 대신 후자가 효과적으로 버려집니다.

표준 Ruby 프로젝트의 핵심 구조는 기본적으로 다음과 같습니다.

  lib/
    foo.rb
    foo/
  share/
    foo/
  test/
    helper.rb
    test_foo.rb
  HISTORY.md (or CHANGELOG.md)
  LICENSE.txt
  README.md
  foo.gemspec

그만큼 share/ 드물고 때로는 호출됩니다. data/ 대신에.Ruby가 아닌 일반 용도의 파일입니다.대부분의 프로젝트에는 필요하지 않지만 여러 번 수행하더라도 모든 것이 그대로 유지됩니다. lib/, 하지만 이는 아마도 모범 사례는 아닐 것입니다.

그만큼 test/ 디렉토리가 호출될 수 있습니다. spec/ TDD 대신 BDD를 사용하는 경우 features/ 오이를 사용하는 경우, 또는 demo/ QED를 사용하는 경우.

요즘에는 foo.gemspec 그냥 그럴 수도 있지 .gemspec --특히 수동으로 유지관리하지 않는 경우에는 더욱 그렇습니다.

프로젝트에 명령줄 실행 파일이 있는 경우 다음을 추가하세요.

  bin/
    foo
  man/
    foo.1
    foo.1.md or foo.1.ronn

또한 대부분의 Ruby 프로젝트에는 다음이 포함됩니다.

  Gemfile
  Rakefile

그만큼 Gemfile Bundler를 사용하기 위한 것이며, Rakefile Rake 빌드 도구용입니다.그러나 다른 도구를 사용하려는 경우 다른 옵션이 있습니다.

그다지 흔하지 않은 몇 가지 다른 파일:

  VERSION
  MANIFEST

그만큼 VERSION 파일에는 현재 버전 번호만 포함되어 있습니다.그리고 MANIFEST (또는 Manifest.txt)에는 프로젝트의 패키지 파일에 포함될 파일 목록이 포함되어 있습니다(예:보석 패키지).

그 밖에 무엇을 볼 수 있지만 사용량이 산발적입니다.

  config/
  doc/ (or docs/)
  script/
  log/
  pkg/
  task/ (or tasks/)
  vendor/
  web/ (or site/)

어디 config/ 다양한 구성 파일이 포함되어 있습니다. doc/ 생성된 문서를 포함합니다.RDoc 또는 때로는 수동으로 유지 관리되는 문서입니다. script/ 프로젝트에서 사용할 쉘 스크립트가 포함되어 있습니다. log/ 생성된 프로젝트 로그를 포함합니다.테스트 범위 보고서 pkg/ 생성된 패키지 파일을 보관합니다. foo-1.0.0.gem; task/ 다음과 같은 다양한 작업 파일을 보유할 수 있습니다. foo.rake 또는 foo.watchr; vendor/ 다른 프로젝트의 복사본을 포함합니다.git 서브모듈;그리고 마지막으로 web/ 프로젝트의 웹사이트 파일이 포함되어 있습니다.

그런 다음 상대적으로 일반적인 일부 도구 관련 파일은 다음과 같습니다.

  .document
  .gitignore
  .yardopts
  .travis.yml

그것들은 상당히 자명합니다.

마지막으로 개인적으로 추가하겠습니다. .index 파일과 var/ 해당 파일을 빌드하기 위한 디렉토리(자세한 내용은 "Rubyworks Indexer" 검색)와 종종 work 디렉토리, 다음과 같습니다:

  work/
    NOTES.md
    consider/
    reference/
    sandbox/

개발 목적을 위한 일종의 폐차장입니다.

@덴타르그:"모든 하위 부분을 포함하려면 하나를 포함하십시오"는 일반적인 패턴입니다.다른 것과 마찬가지로 여기에는 장점(원하는 것을 쉽게 얻을 수 있음)과 단점(인클루드가 많아 네임스페이스를 오염시킬 수 있으며 이를 제어할 수 없음)이 있습니다.귀하의 패턴은 다음과 같습니다

- 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'
        ...

좀 더 제어할 수 있도록 다음을 권장할 수 있습니다.

- 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

왜 동일한 레이아웃을 사용하지 않습니까?일반적으로 컴파일 단계가 없기 때문에 빌드가 필요하지 않지만 나머지는 괜찮은 것 같습니다.

모듈이 무엇을 의미하는지 잘 모르겠지만 단일 클래스인 경우 별도의 폴더가 필요하지 않으며 파일이 두 개 이상인 경우 일반적으로 module-1.rb 파일을 작성합니다(이름 수준에서 module-1 폴더)는 module-1/의 모든 것을 요구하는 것 이상을 수행하지 않습니다.

아, 그리고 나는 다음을 사용하는 것이 좋습니다. 갈퀴 관리 작업용(만들기 대신)

나는 당신이 익숙한 것과 비슷한 것을 고수할 것입니다.자신의 프로젝트 디렉토리에 낯선 사람이 될 필요는 없습니다.:-)

제가 항상 가지고 있는 일반적인 것들은 lib|src, bin, test입니다.

(나는 이런 괴물 생성기를 싫어합니다.새 프로젝트에서 가장 먼저 하고 싶은 일은 README, 문서 등을 작성하는 것이 아니라 코드를 작성하는 것입니다!)

그래서 뉴젬으로 갔습니다.불필요한 RubyForge/gem 항목(hoe, setup 등)을 모두 제거하고 git repo를 생성하고 프로젝트를 NetBeans로 가져왔습니다.모두 20분이 걸렸고 모든 것이 녹색으로 표시되었습니다.그것은 사양 파일에 대한 기본적인 rake 작업까지 제공했습니다.

다들 감사 해요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top