7

我正在开发一个将使用 PEAR 包的项目。因为您永远不知道将在您的托管服务提供商上安装哪个版本的 PEAR 包(尤其是因为我需要将补丁应用到其中一个包),所以我想将我项目的 PEAR 源代码直接放入SVN,因此其他开发人员可以立即拥有依赖项。

但是与 PEAR 相关的所有内容似乎都有绝对目录!运行“pear config-create .pear.conf”来设置新的 PEAR 目录甚至失败并显示错误消息:

根目录必须是绝对路径

我检查了其他一些服务器上的 pear 配置文件,它们似乎也有绝对路径。

每当开发人员将其签出到他自己的机器上,或者我们将其全部导出到服务器时,我们都不知道绝对路径是什么。

有什么办法可以设置吗?

4

3 回答 3

3

我无法让我的托管服务提供商安装我想要的 PEAR 库。以下是我如何使 PEAR 成为我的源代码树的一部分。

1.创建一个remote.conf文件

创建你的 remote.conf 与手册中的有点不同。假设我想在vendor/PEAR一个项目中安装 PEAR。你会这样做:

#from the root of the project
$ cd vendor ; mkdir PEAR ; cd PEAR
$ pear config-create <absolute path to project>/vendor/PEAR/ remote.conf 

2.更新频道

$ pear -c remote.conf channel-update pear.php.net

3.安装梨

$ pear -c remote.conf install --alldeps pear

4.安装任何其他库

$ pear -c remote.conf install --alldeps <libname>

瞧... PEAR 是源代码树的一部分。

渔获物:

  • 即使路径remote.conf是绝对的,库本身仍然可以工作。它只是更新,不会在任何地方工作。您将需要从创建它的同一路径更新它——在上述情况下,从vendor/PEAR.
  • 有些库不喜欢在路径之外,所以你可能必须添加vendor/PEAR到路径中(我有代码,请问你是否需要。)
于 2009-06-29T09:28:41.003 回答
2

如果您有 PHP 5.3.1,请使用 PEAR2 安装程序 Pyrus。pyrus 管理的安装可以移动到任何你喜欢的地方。

下载 pyrus -

$> wget http://pear2.php.net/pyrus.phar

创建一个目录来存储你的 pyrus 安装包:

$> mkdir mylibs

安装包 -

$> php pyrus.phar mylibs install pear/Net_URL

您安装的软件包现在位于mylibs/php/Net/URL.php

请注意,我们传递了 mylibs 目录来指示要安装到哪个目录,以及通道名称“pear”(pyrus 中的默认值为 pear2.php.net)。为方便起见,如果 chmod +x 可以从 cli 执行 pyrus.phar 文件。

您可以将mylibs目录移动到任何您想要的位置。甚至将其提交到您的存储库。

PEAR 网站上有很多文档。

于 2009-12-02T14:41:05.600 回答
1

我完全确定这是否回答了您的问题,但是您可以在命令行上指定 PEAR 存储库的位置,以便您可以使用以下方法创建本地存储库:

pear install --force --installroot=/path/to/my/pear/ PEAR

然后,您可以使用以下方法安装其他软件包:

pear install --installroot=/path/to/my/pear/ SomePackage

要在您的应用程序中使用本地存储库,您必须确保include_path指向本地存储库,而不是默认(全局安装)存储库。所以你希望它看起来像这样:

include_path = ".:/path/to/my/pear/usr/share/php"

关于 :

实际上,他希望避免使用绝对路径,以便可以从多台机器上签出解决方案,而不依赖于每台机器安装存储库的路径。

——卡洛斯·利马

看来你是对的。在这种情况下,我建议您不要将 PEAR 存储库签入您的 SVN 存储库,而是使用部署脚本在服务器上安装/更新存储库。只需确保安装特定版本即可。(您确实有自动部署,对吗?)

于 2009-06-28T20:21:08.407 回答