我在本地构建了一个完整的应用程序,现在尝试按照我一直做的那样在远程服务器上安装(git pull,解决冲突,更新实体,清除缓存......)但是我的新应用程序需要几个包,所以在从github进行拉取并解决冲突之后,我正在尝试安装捆绑包,同样的问题出现在我这一切。
我的服务器是否“杀死”了这个过程?
我整天搜索但找不到问题。我从php.ini的php配置是:
此错误从未发生过,我在2年前在此服务器上安装了许多软件包。有类似经历的人?
谢谢。
编辑:
我做了一个“php composer.phar诊断”,我得到以下内容:
问题出在“composer.json”?
答案 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数量吗?
我已经验证了内存限额,但不认为这是问题所在。
php-cli -i | grep memory
然而,我已经解决了我的问题。实际上有三种方法可以解决它:
<强> 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