2012-03-31 100 views

回答

2

路徑選項不可移植。 Bundler希望能夠在這條路徑上找到代碼,這種做法會破壞自包含的戰爭文件的目的。

解決方法是在基於路徑的gem的目錄中運行「git init; git commit -a」,並將其視爲基於git的gem。然後Bundler可以檢出代碼副本,Warbler可以將副本存儲在war文件中。

+0

謝謝。如果路徑目錄在我的項目中,而不是便攜式,那麼會有一種方法可以向warbler添加支持嗎? – 2012-04-02 19:01:22

0

我(不幸)不能發佈此代碼(可是...),但我已經成功地做到以下幾點:

  1. 哈克鶯(基本上是更換整個捆綁寶石包裝代碼)將:path指定的寶石複製到vendor/gems(正常寶石位置爲gems/gems)。這種複製幾乎與:git規範中warbler複製寶石的方式完全相同。

  2. Monkeypatch打包機因此當它加載Gemfile:path規格時,它們被重寫爲指向vendor/gems

這不太好,但我一直很滿意這個解決方案。


我所看到的另一種選擇是創建一個vendor/gems目錄包含符號鏈接到所有在Gemfile中使用:path寶石。 Warbler會抱怨不支持:path寶石,但它們將通過符號鏈接複製到WAR文件中。我不喜歡這個解決方案,因爲您必須在Gemfile和符號鏈接中維護:path,但實現比上述更容易。


而且,我與尼克西熱同意支持:path原樣(沒有任何上述黑客)不打敗一個自包含的WAR文件的目的,而是一個獨立的WAR文件並不總是可取的。當然,對於非獨立的WAR文件進行權衡,但其中一個優勢是體積更小,複製和解壓縮更快等。當然,支持這一點需要對JRuby-Rack和Warbler進行更改。