【问题标题】:Add PEAR packages to Subversion repository?将 PEAR 包添加到 Subversion 存储库?
【发布时间】:2011-04-25 07:59:58
【问题描述】:

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

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

根目录必须是绝对路径

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

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

有什么办法可以设置吗?

【问题讨论】:

  • 另外:即使我运行“go-pear local”并创建一个本地副本,生成的“pear.conf”文件也包含很多绝对路径,这当然是特定于我的仅限系统。
  • 我最后做了什么:只需下载我想要的 PEAR 包的 tgz 文件,自己解压,提交到 SVN。仍然不敢相信这是最好的方法。
  • 很抱歉找那个人。将通过调试您遇到的问题来改进我的流程。
  • 好吧,我在 Windows 上执行此操作,似乎有两个问题: 1) 当您将 PEAR 安装到新目录时,它实际上会从旧位置删除 pear.bat 文件。因此,如果您有一个服务器范围的 PEAR 存储库,然后创建一个用于特定网站的新存储库,那么它会从服务器范围的位置删除 pear.bat。 (为什么??) 2. 似乎“pear config-create”没有创建所需的子目录,至少在 windows 上是这样。

标签: php svn pear


【解决方案1】:

我无法让我的托管服务提供商安装我想要的 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(我有代码,请问你是否需要。)

【讨论】:

  • 嗨,remote.conf 文件似乎仍然包含绝对路径?此外,第一个步骤之后的所有步骤都会产生关于不存在的各种子目录的错误(如 tmp、.registry 等)
  • 噢!是的,我的意思是在第 1 条捕获下的“绝对”,而不是“相对”。我不确定您遇到的错误...您在哪个平台上,您的 PEAR 是最新的吗?
【解决方案2】:

如果您有 PHP 5.3.1,请使用 Pyrus,PEAR2 安装程序。 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 的话,pyrus.phar 文件可以从 cli 中执行。

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

PEAR website 上有很多文档。

【讨论】:

    【解决方案3】:

    我完全确定这是否回答了您的问题,但您可以在命令行上指定 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 存储库,而是使用部署脚本在服务器上安装/更新存储库。只需确保安装特定版本即可。 (您确实有自动部署,对吧?)

    【讨论】:

    • 其实他是想避免绝对路径,这样就可以从多台机器上检出解决方案,而不依赖于每台安装存储库的路径。
    • 是的,也许这就是我需要做的。 (令人惊讶的是,这实际上是一个问题……我不可能第一个想将 PEAR 包与我的项目捆绑在一起以确保正确的依赖项可用……)
    猜你喜欢
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多