2015-01-09 61 views
3

我正在研究打算使用Module::Build進行部署的Perl應用程序。我需要通過CPAN安裝一些模塊,因爲它們不能通過Ubuntu的軟件包管理器 - 或者更確切地說,我們所有服務器使用的內部apt-get鏡像。雖然在開發服務器上這一切都很好,但IT(可以理解)不願意在沒有緩存或以其他方式控制的生產機器上運行代碼。如何打包我的Perl應用程序的依賴項以進行部署?

由於我們目前沒有CPAN鏡像,這基本上意味着我需要將所有這些非Ubuntu模塊放到一個位置,以便它們可以歸檔和/或提交到版本控制。理想的解決方案是從源代碼控制中檢查實用程序,爲數據庫更改一些配置變量等,然後運行構建/安裝命令並完成。幸運的是,開發服務器是生產服務器的克隆,因此使用XS或其他特定體系結構特性的模塊不應引起問題。

我認爲最簡潔的方法來處理這個問題將檢查源代碼tarballs我需要的模塊,並設置Module::Build使用那些來解決它的依賴關係,而不是看CPAN,但我沒有看到一個選項。這是可行的嗎?還是有另一種方法來整合我所需的基本離線部署所需的所有模塊?

+0

你看了看[App :: FatPacker ](https://metacpan.org/pod/App::FatPacker)? –

+0

Module :: Build沒有(最後我檢查)解析依賴關係本身,它只是告訴cpan(或cpanplus或cpanm)它們是什麼。 cpan可以使用文件url來查找模塊。但考慮使用類似Pinto – ysth

回答

3

正如上述評論所述,Pinto可能會滿足您的需求,因爲它創建了您自己的CPAN回購。

平託有兩個主要目標。首先,Pinto試圖解決CPAN鏡像中不穩定問題 。分發檔案文件是不斷添加並從CPAN中刪除的 ,所以如果您使用它來構建 系統或應用程序,則可能不會獲得相同的結果兩次。 其次,Pinto力求鼓勵開發者使用CPAN工具鏈 來構建,測試和管理他們自己本地的 軟件,即使他們從未計劃將其發佈到CPAN。

Pinto通過提供創建工具來完成這些目標,並管理您自己的分發檔案庫的自定義存儲庫。這些 存儲庫可以包含您喜歡的任何分發存檔,並且可以將 與標準CPAN工具鏈結合使用。這些工具還支持各種操作,使您能夠處理開發過程中出現的常見問題 。


第二個答案

另外,如果你只打算部署到Ubuntu中,你可以把CPAN模塊 - 和你自己到Debian軟件包與dh-make-perl。然後,您可以使用reprepro在自己的回購中託管它們。這樣做的好處是,你可以更新包,並做了

apt-get update 
apt-get upgrade 
客戶機上的

,只要他們有自己的回購作爲源

0

我不知道它是多麼常見,但我一直在使用perlbrewPinto共同解決的一些問題你在談論。

  1. 隨着perlbrew,我不會和 「系統」 perl的交互。有一個應用程序perl和一個系統perl,並且我沒有安裝稍後版本的模塊的風險,該模塊以某種方式干擾了系統perl正在做的事情。

  2. 與Pinto,我有我知道將工作的CPAN模塊的存檔版本。

當我部署,我建立一個perlbrew的Perl(包含「刺」什麼的別名),然後我安裝所有必要的模塊到使用平託存儲庫perlbrew perl的。我目前通過一個cpan bundle模塊(該模塊也進入Pinto repo)來實現這個功能,因此您可以從存儲庫安裝該軟件包,並自動將所有依賴項放入。

相關問題