作曲家从SSH自动“杀死”

时间:2016-04-04 03:51:41

标签: php symfony composer-php

我在本地构建了一个完整的应用程序,现在尝试按照我一直做的那样在远程服务器上安装(git pull,解决冲突,更新实体,清除缓存......)但是我的新应用程序需要几个包,所以在从github进行拉取并解决冲突之后,我正在尝试安装捆绑包,同样的问题出现在我这一切。

enter image description here

我的服务器是否“杀死”了这个过程?

我整天搜索但找不到问题。我从php.ini的php配置是:

enter image description here

此错误从未发生过,我在2年前在此服务器上安装了许多软件包。有类似经历的人?

谢谢。

编辑:

我做了一个“php composer.phar诊断”,我得到以下内容:

enter image description here

问题出在“composer.json”?

6 个答案:

答案 0 :(得分:6)

可能是与PHP CLI内存限制配置相关的问题。 您可以使用以下命令诊断CLI PHP的内存分配:

php -i | grep memory

使用以下命令查看哪个php.ini适用于CLI版本:

php -i | grep 'php.ini'

BTW我建议使用作曲家依赖的正确开发工作流程如下:

  

但您知道,通常应该在您的帐号上运行update   机器,然后提交/部署composer.lock文件,只运行   服务器上的install用于将依赖项与锁同步   文件,以确保您只获得正确测试的东西。那样   你也可以在没有任何问题的情况下运行内存不足的服务器。

希望这个帮助

答案 1 :(得分:2)

谢谢@Matteo

问题可能是服务器上剩余的RAM数量吗?

enter image description here

我已经验证了内存限额,但不认为这是问题所在。

php-cli -i | grep memory

enter image description here

然而,我已经解决了我的问题。实际上有三种方法可以解决它:

<强> 1。安装不带Composer的软件包

这不是一个推荐的解决方案,但通常非常有用,知道如何做到这一点,特别是在非常过时的项目中,你担心命令composer update可能产生的问题

本指南假设您在本地服务器上没有内存限制问题,因此所有命令都可以与作曲家一起使用。

首先,您必须在本地计算机上安装捆绑包,例如:

composer require jms/serializer-bundle

安装软件包后,只需将软件包添加到AppKernel.php文件中即可:

// in AppKernel::registerBundles()
  $bundles = array(
  // ...
  new JMS\SerializerBundle\JMSSerializerBundle(),
  // ...
);

第二次,从您的包目录中打开composer.json,例如

// \vendor\jms\serializer-bundle\JMS\SerializerBundle\composer.json
"require": {
    "php": ">=5.4.0",
    "jms/serializer": "^1.0.0",
    "phpoption/phpoption": "^1.1.0",
    "symfony/framework-bundle": "~2.3|~3.0"
},

对于“require section”中的每个包,打开相应的composer.json以识别所有必需的包。

目的是复制所有这些包的目录并将它们上传到“vendor”目录中的远程服务器(注意保持相同的大型目录层次结构)

e.g:

如果你从jms / serializer包打开composer.json,你可以看到:

// vendor/jms/serializer/composer.json
"require": {
    "php": ">=5.4.0",
    "jms/metadata": "~1.1",
    "jms/parser-lib": "1.*",
    "phpcollection/phpcollection": "~0.1",
    "doctrine/annotations": "1.*",
    "doctrine/instantiator": "~1.0.3"
},

现在,您应该从jms / metadata,jms / parser-lib和phpcollection / phpcollection打开composer.json,以识别您必须上传到远程服务器的其他包。

目标是不缺少任何依赖项。

终于,从远程服务器打开/vendor/composer/autoload_namespaces.php并添加捆绑依赖项的所有命名空间。你应该在本地比较这个文件“autoload_namespaces.php”。

<强> 2。添加交换空间

您有三个选择:创建新的交换分区,创建新的交换文件或扩展现有LVM2逻辑卷上的交换。建议您扩展现有的逻辑卷。

第3。更新本地的作曲家只能安装在远程

这是进行良好编程练习的推荐选项。当composer update在第三个项目上完成时,我们不知道会发生什么错误,但是当你有足够的时间进行开发并且项目将从现在开始时,你应该让项目完全升级。使用composer update在本地服务器上进行首次更新,并解决出现的所有冲突。最后,在服务器上更新了composer.json和composer.lock,从现在开始,只需要运行composer install来安装和更新新包的所有依赖项。

Matteo的解释是正确的,composer update命令占用的内存比composer install多得多。

  

但您知道,您通常应该在您的计算机上运行更新,然后提交/部署composer.lock文件,并且只在您的服务器上运行install以将依赖项与锁定文件同步,以确保您只获得你测试得好的东西。这样你也可以运行内存不足的服务器而没有任何问题。

答案 2 :(得分:1)

将composer.lock文件从本地设备上传到服务器 并运行composer install

答案 3 :(得分:0)

Matteo,我认为,它被认为是正确的答案,但这可能是一个更简单的答案:

对于我必须做的有限数量的composer update,如果我只是不断重复该命令,它会不断获得Killed,但每次都会更进一步。所以经过几次尝试,它结束了,我的系统很好。

答案 4 :(得分:0)

您可以在本地机器的项目目录中安装包,然后上传所有更新的文件,大部分是安装的包及其依赖项,位于供应商文件夹,composer.json和composer.lock。

答案 5 :(得分:-2)

Composer Update静默返回“已杀死”#1815

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo chmod 600 /var/swap.1
sudo /sbin/swapon /var/swap.1