【问题标题】:How can I composer package on the server that I have installed on my local machine?如何在本地计算机上安装的服务器上编写程序包?
【发布时间】:2018-11-29 08:42:37
【问题描述】:

我通过终端安装了 Ramsey/Uuid 插件:

composer require ramsey/uuid

在我的 PagesRepository.php 中,我正在创建这个函数:

use Ramsey\Uuid\Uuid;

  function generateUid()
  {
     $uuid = Uuid::uuid4();
     $uuid = $uuid->getHex();
     $uuid =  substr($uuid,0,10);

     return   $uuid;
  }

我正在使用 PagesController.php 中的函数

  $unique_id = PagesRepository::generateUid();
  $entity->setUnique_id($unique_id);

它在我的本地机器上工作得很好,但是我通过 git 将它推送到我的服务器,然后我收到错误消息:

尝试从命名空间“Ramsey\Uuid”加载类“Uuid”。你是否 忘记一个“使用”声明 “Symfony\Component\Validator\Constraints\Uuid”?

我无法在服务器上安装任何东西,因为它是共享主机并且权限被拒绝,因此我将 ramsey 文件夹复制到服务器上的供应商文件夹中。但这并没有解决问题。

我不明白,为什么这需要 Symfony 验证器,因为它在本地机器上不需要它。

【问题讨论】:

    标签: php symfony composer-php


    【解决方案1】:

    这是因为 composer 自动生成的文件未链接您的文件夹或类 (ramsey) 。

    所以,据我了解,您不能在共享主机上运行 composer updatecomposer install,您应该将整个更新后的 vendor 文件夹上传到您的服务器。

    然后像vendor\composer\autoload_psr4.php这样的自动生成的文件将被更新并链接到像Ramsey\Uuid\Uuid这样的类。

    点是

    PHP 命名空间不能自动包含类/文件。它使用 composer 自动生成的链接文件和 __auload 魔术函数加载类。

    【讨论】:

    • 当我删除整个供应商文件夹并上传它时它起作用了!
    【解决方案2】:

    如果您的服务器中没有运行composer install,则至少需要将整个vendor 文件夹复制到运行系统的任何位置。

    例如,您安装的软件包可能已经安装了其他依赖项,但在仅传输该软件包的文件时您并未复制它们。至少您需要生成的自动加载器文件。

    由于您在 dev 上创建安装并将其转移到生产中,我建议您删除本地的 vendor 文件夹并首先重新进行整个安装:

    composer install --prefer-dist --no-dev --no-scripts --no-progress --no-suggest --classmap-authoritative --no-interaction
    

    并将那个供应商文件夹转移到生产环境。您应该确保安装过程不包括任何其他步骤(启用捆绑包、创建配置文件等),但我希望您在某个时候能够处理好这些。

    完成后,您可以重置之前的步骤,并定期进行composer install 进行开发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-10
      • 2023-03-25
      • 1970-01-01
      • 2013-04-09
      • 2014-06-19
      • 2018-12-28
      • 2018-06-30
      • 1970-01-01
      相关资源
      最近更新 更多