İdeal Ruby proje yapısı


125

Ruby (raysız / merb / vb.) Projesi için ideal proje yapısına genel bir bakış / açıklama peşindeyim. Sanırım takip ediyor

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

Yanlış bir şey mi var? Hangi bölümleri kaçırdım?


Yanıtlar:


88

Bence bu oldukça yerinde. Varsayılan olarak, Rubygems lib dizinini yük yoluna ekler, ancak istediğiniz dizini $: değişkenini kullanarak ona itebilirsiniz. yani

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

Bu, surfer.rbo dizinde, istediğiniz require "surfer"yere gidebileceğinizi ve dosyanın bulunacağını söylediğinizde anlamına gelir .

Ayrıca, bir kural olarak, sınıflar ve singletonlar bir dosya alır ve modüller bir dizin alır. Örneğin, LolCatzmodüle ve LolCatz::Moarşöyle görünecek sınıfa sahipseniz :

lib/
  appname.rb
  lolcatz/
    moar.rb

Bu yüzden bir lib / appname klasörü vardır, çünkü çoğu kitaplık appnamead alanında bulunur.

Ek olarak, newgem --simple [projectname]bir Ruby projesi için (ve uzantı olarak bir Ruby Gem) sizin için hızlı bir şekilde bir yapı iskelesi oluşturacak komutu çalıştırmayı denerseniz . Bunu yapan başka araçlar da var, biliyorum ama newgem oldukça yaygın. Genelde TODO dosyasından ve tüm betik şeylerinden kurtulurum.


1
tatlı. Newgem hakkında bir bilgim yoktu. Ray olmayan projelerim, tanıdık bulduğum için genellikle Rails yapısını yansıtıyor. Bu en iyi uygulama ipucu için teşekkürler.
berlin.ab

Başka bir önemli dosya da "LİSANS" olabilir
bluehavana

2
libYük yoluna otomatik olarak eklendiğinde tanımladığınız davranışı anlamıyorum. 1.9'luk bir şey mi? Bunun gerçekleşmesi için herhangi bir özel yapılandırma gerekli mi?
Emily

5
Bir mücevher şablonu oluşturmak için paketi de kullanabilirsiniz. newgem bu yorum sırasında 9 aydır taahhütte bulunulmamış. Komutbundle gem gem_name
Ninjaxor


6

Genellikle Rails ile ilgilenen ekibim yapıyı başka bir konfigürasyondan daha iyi anlayacağı için Rails proje yapısını taklit etmeye çalışıyorum. Konfigürasyon Üzerine Konvansiyon - Raylardan hava alma.


6
Bazı harici geliştiriciler kodunuza bakarsa, görecekleri sizin kişisel kuralınızdır. Bence orta / büyük bir proje için, tamamen farklı bir proje türü için bir dizi konvansiyonu kullanmak daha fazla kafa karışıklığına neden olabilir. Ray uygulaması mı, yakut uygulaması mı? Neden bir ray uygulaması gibi tasarlandı? "Bir şeyi bozmadan önce geliştiriciyle iletişime geçsem iyi olur ..." Bu, baştan itibaren biraz ek yük
getirecek

@Jj_'ye katılıyorum. Bunun biraz eski olduğunu biliyorum, ancak insanların neden topluluk sözleşmeleri olduğunu anlamalarının önemli olduğunu düşünüyorum. Birini sokaktan çekebilmeniz için, projenizi görebilir ve çatlayabilir. Bu, bir şeye bakıp anlayabilmeniz için. Alanın kurallarını kullanmanın önemli olduğunu düşünüyorum. Proje yapılandırması üzerinden alan kuralı.
WattsInABox

2

Paketleyiciyi kullanıyorsanız, bu komutu çalıştırmak bundle gem app_namesize aynı dizin yapısını verecektir.

Birim testleri yerine rspec kullanmak istiyorsanız, bu komutu çalıştırabilirsiniz rspec --init ( cd app_nameİlk önce emin olun )

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.