2009-03-05 35 views
114

Tôi sau một tổng quan/làm rõ cấu trúc dự án lý tưởng cho một dự án ruby ​​(không rails/merb/etc). Tôi đoán nó tuân theo các dòng:Cấu trúc dự án ruby ​​lý tưởng

app/ 
    bin/     #Files for command-line execution 
    lib/ 
    appname.rb 
    appname/   #Classes and so on 
    Rakefile    #Running tests 
    README 
    test,spec,features/ #Whichever means of testing you go for 
    appname.gemspec  #If it's a gem 

Tôi có điều gì sai không? Tôi đã bỏ lỡ những phần nào?

Trả lời

84

Tôi nghĩ rằng đó là khá nhiều điểm trên. Theo mặc định, Rubygems sẽ thêm thư mục lib vào đường dẫn tải, nhưng bạn có thể đẩy bất kỳ thư mục nào bạn muốn vào đó bằng biến $:. ví dụ:

$:.push File.expand_path(File.dirname(__FILE__) + '/../surfcompstuff') 

Điều đó có nghĩa khi bạn đã nói, surfer.rb trong dir đó, bạn có thể require "surfer" bất cứ nơi nào và tập tin sẽ được tìm thấy.

Ngoài ra, như một quy ước, các lớp học và người độc thân có được một tệp và mô-đun nhận được một thư mục. Ví dụ, nếu bạn có các mô-đun LolCatz và lớp LolCatz::Moar đó sẽ trông giống như:

lib/ 
    appname.rb 
    lolcatz/ 
    moar.rb 

Đó là lý do tại sao có một thư mục lib/appname bởi vì hầu hết các thư viện đang trong namespace appname.

Ngoài ra, nếu bạn thử chạy lệnh newgem --simple [projectname], nó sẽ nhanh chóng tạo ra một giàn giáo cho bạn chỉ với các yếu tố cần thiết cho dự án Ruby (và mở rộng một Gem Ruby). Có những công cụ khác làm điều này, tôi biết, nhưng newgem là khá phổ biến. Tôi thường loại bỏ tệp TODO và tất cả nội dung tập lệnh.

+7

Lưu ý rằng bạn sẽ phải [sudo] gem install newgem để có được lệnh newgem ... –

+1

ngọt ngào. Tôi không biết về newgem. Các dự án phi đường ray của tôi thường phản ánh cấu trúc Rails bởi vì tôi đã thấy nó quen thuộc. Cảm ơn bạn về mẹo thực hành tốt nhất này. –

+0

Một tệp quan trọng khác có thể là "PHÉP" – bluehavana

6

Tôi cố gắng bắt chước cấu trúc dự án Rails vì nhóm của tôi, thường giao dịch với Rails, sẽ hiểu cấu trúc tốt hơn cấu hình khác. Công ước về cấu hình - chảy máu từ Rails.

+6

Nếu một số nhà phát triển bên ngoài xem xét mã của bạn, những gì họ sẽ thấy chỉ là quy ước _personal_ của bạn. Tôi nghĩ rằng đối với một dự án trung bình/lớn, việc sử dụng một tập hợp các quy ước dành cho một loại dự án hoàn toàn khác có thể gây ra nhiều nhầm lẫn hơn. Nó là một ứng dụng đường ray, một ứng dụng ruby? Tại sao nó được thiết kế giống như một ứng dụng đường ray? "Tôi nên liên lạc với nhà phát triển trước khi tôi phá vỡ một cái gì đó ...?" Điều đó sẽ thêm một chút chi phí ngay từ đầu .. –

+0

Tôi đồng ý với @jj_. Tôi biết điều này là khá cũ, nhưng tôi nghĩ rằng điều quan trọng là mọi người hiểu tại sao có các công ước cộng đồng. Đó là để bạn có thể kéo ai đó ra khỏi đường phố, họ có thể thấy dự án của bạn và bị nứt. Nó là để bạn có thể tìm kiếm một cái gì đó và hiểu nó. Tôi cảm thấy điều quan trọng là sử dụng các quy ước của miền. Quy ước miền trên cấu hình dự án. – WattsInABox

8

Xem ví dụ sau đây từ http://guides.rubygems.org/what-is-a-gem/

% tree freewill 
    freewill/ 
    ├── bin/ 
    │ └── freewill 
    ├── lib/ 
    │ └── freewill.rb 
    ├── test/ 
    │ └── test_freewill.rb 
    ├── README 
    ├── Rakefile 
    └── freewill.gemspec 
Các vấn đề liên quan