在我看来,PEAR至less是作为一种分配机制再次加速。 由于简单的PEAR频道服务器的可用性(例如Pirum ),似乎许多项目正朝着PEAR发展,成为一种分配机制。 一些例子包括PHPUnit,Phing,Symfony2,Doctrine2等等。 但是,我正在尝试pipe理这个问题时遇到了严重的麻烦。
我不想再使用一个系统级的PEAR。 我在一台服务器上有几十个网站,全部使用通过PEAR渠道分发的各种库。 其中一些网站是旧的。 有些依赖关系有冲突。 我不希望每次有新的软件包版本出现时都要检查30个以上的站点。 但是,同时我不想在一个新的站点上工作时被困在一些古老的软件包版本上。
我已经打破了这个相当长一段时间了。 PEAR作为一种分配机制似乎完全不适用于多个站点在同一台服务器上运行的任何types的设置。 在一台机器上维护许多并行PEAR存储库似乎是不可能的,或者将PEAR存储库检查到版本控制中。
很多问题似乎是由于PEAR在安装时replace了PHP文件中的某些path,而不是在运行时解决它们。 例如,Phing想知道PEAR的data_dir在哪里。 当安装文件phing/Phing.php ,string@data_dir@会被当前的data_dirreplace。 但是,这使得它不可能移动或保持版本控制。
我知道Pyrus和PEAR2应该解决很多问题,但是在这一点上它们似乎不是可行的select。 我的许多网站都依赖PEAR包,而不是移植到PEAR2。 Pyrus对于PEAR通道的实现非常挑剔,使得许多PEAR1通道在Pyrex中不可用(例如PHPUnit拒绝与Pyrus一起安装,因为在eZcomponents.org上configuration错误)。
因此,未来似乎会通过PEAR渠道带来更多的软件包,那么我怎样才能pipe理我所有网站上的所有依赖项? 我不能是唯一受这个苦难的人。 比我聪明的人一定已经解决了这个问题。
编辑 :到目前为止,我发现了Pearanha 。 基本上它会为您的特定项目生成一个自定义PEAR。 这需要在构build步骤中进行整合,因为它不会使PEAR存储库可移动。
梨切换承诺使PEAR存储库可移动,但它不起作用。 它是硬编码的,用于处理pearcmd.php的registry文件和硬编码包含path,但是它不处理在安装期间被replace为PHP文件的任何其他path。
使用Pyrus,下一代pear安装程序,并按照使用Pyruspipe理PEAR可安装供应商库中的说明进行操作。
基督徒是对的。 Pyrus是pipe理您的应用程序的PEAR可安装供应商依赖项的本地registry的最佳方式。
我认为你遇到的问题是由不好实施的软件包/渠道,而不是特定于pyrus的问题,或方法。
例如,Pyrus不允许用户自定义data_dir的path,因此安装可以是独立的,包可以依赖于data_dir文件的位置。
例如,使用新registry目录布局的供应商目录如下所示:
data <--- role = data docs <--- role = doc php <--- role = php tests <--- role = test www <--- role = www
使用基于当前目录的path,而不是@ data_dir @replace,例如
dirname(__DIR__).'/data/pear.channel.com/PackageName/datafile';
分发PEAR可安装库的开发人员应该修改他们的软件包以使用更新的registry目录布局标准,而不是依赖于将安装与特定机器绑定的pathreplace。