【问题标题】:Using Composer packages in a FuelPHP app managed with GitHub在由 GitHub 管理的 FuelPHP 应用程序中使用 Composer 包
【发布时间】:2013-12-26 20:36:50
【问题描述】:

我有一个使用 FuelPHP 构建的 Web 应用程序,该应用程序托管在私有 GitHub 存储库上。

我最近在项目using Composer 中添加了JAXLAPNS-PHP。具体来说,我在fuel/app 目录中创建了一个composer.json,其中包含以下内容:

{
    "require": {
        "varavan/apns-php": "dev-master",
        "abhinavsingh/jaxl": "3.*@dev"
    }
}

我运行了composer update,并且在我的本地开发环境中一切正常。我也可以从命令行很好地推送到 GitHub。

但是,当我在公共服务器上pull 时,新安装的composer 包并没有包含在拉取中,尽管它们的目录已创建。具体来说,这些目录存在,但为空:

fuel/app/vendor/abhinavsingh/jaxl/
fuel/app/vendor/varavan/apns-php/

如果我查看 GitHub 上的那些目录,它们看起来不像目录。他们有一个我不认识的图标:

另外,如果我从 GitHub GUI 应用程序中单击“同步分支”,它会给我这个消息这已经解决,请参阅下面的更新。

“fuel/app/vendor/abhinavsingh/jaxl”中的子模块已从 .gitmodules,但该文件夹仍然存在于存储库中。删除 文件夹,提交更改,然后重试。

什么!?

我使用 composer 来安装 JAXL,而不是 Git。

如果我在服务器上运行composer install,它会说:

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files

但是 JAXL 和 APNS-PHP 目录仍然是空的。

如何将作曲家包放到我的生产服务器上?

更新

我将此添加到我的.gitmodules 文件中:

[submodule "fuel/app/vendor/abhinavsingh/jaxl"]
        path = fuel/app/vendor/abhinavsingh/jaxl
        url = git://github.com/abhinavsingh/JAXL.git
[submodule "fuel/app/vendor/varavan/apns-php"]
        path = fuel/app/vendor/varavan/apns-php
        url = git://github.com/varavan/ApnsPHP.git

这解决了 GitHub GUI 应用程序给我的错误,但我仍然不知道如何在生产服务器上安装作曲家包。

【问题讨论】:

  • 你为什么要首先推送 composer 托管包?
  • 我没有专门尝试推送作曲家托管软件包,我只是运行了git pushgit pull,一切都崩溃了。我只是想把事情整理好。
  • 你在 apns-php/ 和 jaxl/ 中有一个 .git 目录吗
  • 在我的本地机器上,是的,我在apns-phpjaxl 目录中都有.git 目录。在生产服务器上,这些目录中没有任何内容。
  • 你应该将你的 vendor 目录添加到你的 .gitignore 文件中。 Composer 安装的包应该推送到 GitHub;克隆存储库时只需运行composer install

标签: php git github fuelphp


【解决方案1】:

我继续尝试我能想到的一切来加载作曲家包,但我无法弄清楚。

将子模块定义添加到我的.gitmodules 文件后,我从生产服务器中删除了整个项目并从 GitHub 重新克隆了整个项目。子模块随之而来。

这不是作曲家做事的方式……

随便。真是浪费时间。

【讨论】:

    【解决方案2】:

    Composer 使用 git,尤其是在您指定需要开发版本时。它将直接从源中获取。

    如果您在应用程序中创建第二个供应商文件夹,并且 Composer 已在其中添加了一个 git 存储库(由于您指定的内容),git 将检测到 repo-in-repo,并且由于子模块对 Fuel 处于活动状态,它会假设您正在添加一个新的子模块。

    就像 Martin Bean 所说,确保您排除了供应商文件夹,以防止这种情况发生。

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 2013-02-10
      • 2020-02-01
      • 1970-01-01
      • 2014-11-12
      • 2018-04-09
      • 2020-04-06
      • 1970-01-01
      相关资源
      最近更新 更多