문제
루비를 배우기 시작했어요.저는 또한 일상적인 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 작업까지 제공했습니다.
다들 감사 해요.