Php

如何管理 PEAR 包的依賴關係

  • July 10, 2011

在我看來,PEAR 正在重新崛起,至少作為一種分配機制。隨著簡單的 PEAR 通道伺服器(例如Pirum )的出現,似乎許多項目正在將 PEAR 作為一種分發機制。一些範例包括 PHPUnit、Phing、Symfony2、Doctrine2 等。但是,我在嘗試管理這個時遇到了嚴重的麻煩。

我不想再使用單個系統範圍的 PEAR。我在一台伺服器上有幾十個網站,所有網站都使用通過 PEAR 渠道分發的各種庫。其中一些網站很舊。有些有衝突的依賴關係。我不想每次出現一些新的軟體包版本時都要檢查 30 多個站點。但是,與此同時,當我在一個新站點上工作時,我不想被困在一些古老的軟體包版本上。

很長一段時間以來,我一直在為此煩惱。PEAR 作為一種分發機制似乎完全不適合在同一伺服器上執行多個站點的任何類型的設置。在一台機器上維護許多並行的 PEAR 儲存庫,或者將 PEAR 儲存庫檢查到版本控制中似乎是不可能的。

許多問題似乎是因為 PEAR 在安裝時替換 PHP 文件中的某些路徑,而不是在執行時解決它們。例如,Phing 想知道 PEAR 在哪裡data_dir。安裝文件phing/Phing.php後,該字元串@data_dir@將替換為data_dir當時的任何內容。但這使得無法移動它或將其置於版本控制之下。

我知道 Pyrus 和 PEAR2 應該可以解決很多問題,但目前它們似乎不是可行的選擇。我的許多站點都依賴於未移植到 PEAR2 的 PEAR 包。Pyrus 在 PEAR 通道實現方面非常挑剔,使得許多 PEAR1 通道無法與 Pyrex 一起使用(例如,由於 eZcomponents.org 上的錯誤配置,PHPUnit 拒絕使用 Pyrus 安裝)。

那麼,未來似乎會通過 PEAR 渠道帶來更多的軟體包,我該如何管理我所有網站的所有這些依賴項?我不能是唯一一個遭受這種痛苦的人。比我聰明的人一定已經解決了這個問題。

編輯:到目前為止,我找到了 Pearanha。基本上,它會為您的特定項目生成一個自定義 PEAR。不過,這需要在建構步驟中集成,因為它不會使 PEAR 儲存庫可移動。

pear-switch承諾使 PEAR 儲存庫可移動,但它不起作用。它是硬編碼來處理系統資料庫文件和硬編碼的包含路徑pearcmd.php,但它不處理在安裝期間替換到 PHP 文件中的任何其他路徑。

使用 Pyrus,下一代 pear 安裝程序,並按照Using Pyrus To Manage PEAR Installable Vendor Libs中的說明進行操作。

克里斯蒂安是對的。Pyrus 是為您的應用程序管理 PEAR 可安裝供應商依賴項的本地系統資料庫的最佳方式。

我認為您遇到的問題是由實施不善的包/渠道引起的,而不是特定於 pyrus 或方法的問題。

例如,Pyrus 不允許使用者自定義 data_dir 的路徑,因此安裝可以是獨立的,並且包可以依賴於 data_dir 文件所在的位置。

例如,使用新系統資料庫目錄佈局的供應商目錄如下所示:

data   <--- role = data
docs   <--- role = doc
php    <--- role = php
tests  <--- role = test
www    <--- role = www

而不是 @data_dir@ 替換,使用基於目前目錄的路徑,例如

dirname(__DIR__).'/data/pear.channel.com/PackageName/datafile';

分發 PEAR 可安裝庫的開發人員應該修改他們的包以使用更新的系統資料庫目錄佈局標準,而不是依賴於將安裝綁定到特定機器的路徑替換。

引用自:https://serverfault.com/questions/287389