回答

2

rails plugin new創建一個空的寶石,立即鉤入軌道。所以它確實創建了一個「框架」供您填寫。

然後,您仍然需要bundlerjeweler實際將該組文件轉換爲gem併發布它。

你會從這兩者中選擇一個有點味道的問題。最近我發現很多人實際上都在鼓吹使用bundler。但與bundler它仍然主要是一個手動過程。

我個人認爲使用jeweler仍然很有趣。什麼是使用珠寶商的優點:

  • 使用Gemfile在任何欄杆或其他項目,珠寶商將生成對應於一個gemspec。請注意,這與來自bundler名氣的Yehuda相反:他建議手動填寫gemspec,然後讓Gemfile通過在文件中指定gemspec來使用它。
  • 增加了一套rake任務,使您的生活更輕鬆發佈和建立你的寶石
  • 可以方便的版本管理
  • 用git很好的整合,將自動標記,推,提交。

總之我仍然推薦使用jeweler,做完rails plugin new之後。

希望這會有所幫助。

0

由於寶石更易於安裝和管理,因此最好使用jeweler來創建寶石。尋找靈感的最好方法是打開Rails集成的任何gem的源代碼,並看看它們是如何實現的。通常這是通過Railties設施完成的。

3

通常,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 newtest/中製作了一個虛擬應用程序。如果你的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對我來說很容易。另外,如果我在每個工具給你的錯誤或遺漏方面做出了錯誤或遺漏,我已經將答案作爲維基,以便它們得到糾正。

相關問題