2014-08-28 77 views
1

我目前正在創建寶石的過程中,它似乎比比較寶石更大。如何縮小寶石的尺寸

首先這是一個真正的問題,如果有的話,是否有一種特殊的方法來減小寶石的大小?

寶石:https://rubygems.org/gems/roroacms

Github上:https://github.com/roroacms/roroacms

+0

你有沒有比較另一個鐵路公司(如煉油廠)? – apneadiving 2014-08-28 08:26:22

+0

我會說大小不是問題。它只在你的服務器啓動時加載,並不像你在響應或其他東西中向任何人提供它。然而,它總是值得更多地瞭解你在做什麼:) – 2014-08-28 08:49:47

回答

5

寶石的spec/目錄中有,打開包裝時,超過99MB。你一定要把它從最終的寶石中排除出去(即使很小)。它之所以如此之大是因爲它包含了一個log/(80MB)和tmp/(18MB)目錄仍然存在的虛擬應用程序。

排除文件的方式是通過gemspec中的files變量。該變量包含將放入構建好的gem中的每個文件的數組。

Gem::Specification.new do |gem| 
    gem.files = `git ls-files`.split($/).reject { |fn| fn.start_with? "spec" } 
    ... 
end 

代碼將首先得到目錄中每個文件的列表(git ls-files它也將從.gitignore應用的規則),然後刪除其路徑與spec開頭的文件。

您是否想將測試包含在最終的寶石中取決於您。問題是沒有簡單的方法來運行測試。曾經有一個選項(-t)直接通過Rubygems來完成,但該選項在很久以前就被刪除了。鑑於這種情況,我認爲最好的做法是將測試保存在存儲庫中。

請注意,您可能還會在gemspec中看到一個名爲test_files的變量。該變量已被棄用,並沒有做任何事情。

+0

是的,這是非常有意義的。我認爲在寶石中保持測試是一種很好的做法?如果情況並非如此,那麼我可以刪除它們,忽略gem文件的最佳方法是什麼? – 2014-08-28 11:47:17

+0

@ user2323463我已經擴展了答案。 – 2014-08-28 12:46:35

+1

我想這不再需要,因爲它看起來像新引擎包含一行只包含相關文件: Gem :: Specification.new do | s |' s.files = Dir ['{app,config,db ,lib}/**/*','MIT-LICENSE','Rakefile','README.md']' – klavado 2017-05-03 12:58:18