我應該使用新的Rails 3.1 rails plugin new
命令,珠寶商或捆綁器來創建我的第一個Ruby on Rails Gem嗎?你會推薦哪些教程來幫助我開始編寫用於Ruby on Rails的開源Gems?我應該使用哪種方法來創建我的第一個使用Rails 3.1的開源Ruby Gem?
回答
rails plugin new
創建一個空的寶石,立即鉤入軌道。所以它確實創建了一個「框架」供您填寫。
然後,您仍然需要bundler
或jeweler
實際將該組文件轉換爲gem併發布它。
你會從這兩者中選擇一個有點味道的問題。最近我發現很多人實際上都在鼓吹使用bundler
。但與bundler
它仍然主要是一個手動過程。
我個人認爲使用jeweler
仍然很有趣。什麼是使用珠寶商的優點:
- 使用
Gemfile
在任何欄杆或其他項目,珠寶商將生成對應於一個gemspec。請注意,這與來自bundler名氣的Yehuda相反:他建議手動填寫gemspec,然後讓Gemfile
通過在文件中指定gemspec
來使用它。 - 增加了一套rake任務,使您的生活更輕鬆發佈和建立你的寶石
- 可以方便的版本管理
- 用git很好的整合,將自動標記,推,提交。
總之我仍然推薦使用jeweler
,做完rails plugin new
之後。
希望這會有所幫助。
由於寶石更易於安裝和管理,因此最好使用jeweler
來創建寶石。尋找靈感的最好方法是打開Rails集成的任何gem的源代碼,並看看它們是如何實現的。通常這是通過Railties設施完成的。
通常,Ruby gems非常簡單,Rails插件只是以某種方式觸及Rails API的gem。 (正如另一個答案指出的,Railtie
是鉤入Rails的好方法)。要編寫一個寶石,指定一個文件夾,並在它:
<gemname>.gemspec
:此列出了寶石的名稱,版本,作者,網站,寶石依賴列表和文件列表中的寶石包括。 (Rails'plugin new
和Bundler gem都會爲你生成良好的.gemspecs,見下文)lib/<gemname>.rb
:這是你的寶石的主要代碼。通常這包含一個以寶石命名的類或模塊。 (Rails'plugin new
隨模塊一起提供)。
其他的都是可選的,但良好的做法包括:
test/
或spec/
:這是你的測試去。由於Rails插件通常用於應用程序,因此Rails的plugin new
在test/
中製作了一個虛擬應用程序。如果你的gem非常獨立,沒有明確的Rails集成,你不需要虛擬應用程序。- 自述文件,用於描述您的寶石的功能以及如何使用。
你可以手工將這個文件夾和,關鍵的是,.gemspec
文件完全,但是這兩個工具會給你以下幾點:
捆紮機爲您做的:
- 創建
Gemfile
並自動包含您的套件中的<gemname>.gemspec
中指定的相關性(它是單個的Gemfile
命令,gemspec
) - 創建樣本
<gemname>.gemspec
爲你設置它以從你的設備上拉出你的寶石版本lib/<gemname>/version.rb
- 設置使用Git生成一個gem文件列表(方便,但是gem-building機器需要安裝Git)。通常我使用Rake來做這件事,但它更煩人。
Rails的plugin new
做的Gemfile
和.gemspec
,就像捆紮機。另外:
- Rails使用Ruby來生成gemfiles列表。尼斯。
- 它爲您設置了一個最小的目錄結構,大部分是空的。
- 它設置了一個樣本測試和一個完整的虛擬應用程序(!)供測試運行。我只是看到了這一點,它讓我成爲天才。
的Rails也會讓你Rakefile
,添加耙任務,這兩種工具將預先配置的.gitignore GIT中忽略一些常見的產品。
要在實際應用中測試您的寶石,請執行gem build <gemname>.gemspec
,並將gem <gemname>
添加到您的應用的Gemfile
。這將創建一個-gem文件,其中包含整個gem。你可以gem install <gemname>-<version>.gem
,Bundler會把它撿起來。
當您準備發佈時,gem push <gemname>-<version>.gem
會將其推送到RubyGems.org。有關獲取帳戶和推動寶石的詳細信息,請參閱http://rubygems.org。
此外,在開發過程中,您需要對寶石進行更改,而不必繼續構建(和安裝)版本。單元測試會照顧一些這一點,但如果你想直接從源使用的寶石,捆紮機有一個奇妙的工具:
gem <gemname>, :path => "<path/to/your/gems/folder>"
該文件夾是包含.gemspec
文件中的一個。
有誰知道有任何理由使用珠寶商?我很想知道它比這些人做得更多。一般來說,一旦你有一個模板來複制和粘貼和修改,手寫gemspec
對我來說很容易。另外,如果我在每個工具給你的錯誤或遺漏方面做出了錯誤或遺漏,我已經將答案作爲維基,以便它們得到糾正。
- 1. 我應該使用哪種方法?
- 2. 在iOS中使用Xamarin.iOS(C#)創建背景:我應該使用哪種方法?
- 3. 東方JS,我們應該使用哪種方法來創建一個新的頂點,爲什麼
- 4. 我應該使用哪種類型的jdk來開發我的應用程序?
- 5. 應該使用哪種gem來測試JavaScript,使用rails jasminerice或jasmine-rails或teaspoon?
- 6. 我應該使用哪種方法來實現此Storm拓撲?
- 7. 我應該使用哪種方法來清理文本區域?
- 8. 我應該在第一個Ruby on Rails應用程序中使用哪種類型的數據庫?
- 9. 我應該爲我的開源項目使用哪個許可
- 10. 我應該使用哪個資源來保留我的API RESTFul?
- 11. 我應該使用移動應用程序與Sorcery gem一起使用哪種驗證方法?
- 12. 我應該在Rails 2.3.3中使用哪個版本的Ruby?
- 13. 我應該使用哪種技術來創建新應用程序?
- 14. 當我使用CodeIgniter構建我的第一個站點時,我應該使用哪些資源?
- 15. 我應該使用哪種解決方案來構建應用程序?
- 16. 我應該使用哪些Rails創業板來使用Resque重複創作?
- 17. 我應該使用哪個Rails Association?
- 18. 我應該使用哪個Rails插件?
- 19. 創建一個庫應用程序 - 使用哪種方法?
- 20. 如果我想創建一個ruby/rails gem來管理CSS類的優先級,我會從哪裏開始?
- 21. 我應該使用哪種HTTP方法來創建請求或簡單地讀取資源?
- 22. 我被要求建立一個webshop,我應該使用哪種腳本語言?
- 23. 我應該在哪種情況下使用DataSource的destroy方法?
- 24. 我應該使用這種方法嗎?
- 25. 我應該在哪裏創建在我的視圖中使用的方法?
- 26. 我應該採用哪種設計方法來創建此自定義視圖?
- 27. 我應該在哪裏放置我的第一個方法
- 28. 我應該使用哪種連接? [EF4.0代碼第一]
- 29. 我應該使用哪種YouTube數據API認證方法?
- 30. 我們應該使用哪一種方法,用於存儲我們CoreData對象