无效参数:composer install symfony

6

我正尝试使用以下命令从composer.json文件安装symfony 2.4.1:

php composer.phar install

我从包含 composer.json 文件的根目录(var/www/projectname/)运行此命令。

许多软件包已经正确安装。当安装Doctrine软件包时,我收到以下错误:

InvalidArgumentException $from (/var/www/projectname/bin/doctrine) and $to () must be absolute paths.

我已经尝试过:

  • 运行php composer.phar selfupdate(现在是最新版本)
  • 运行php composer.phar update
  • 运行php composer.phar install

删除整个项目(包括composer.json),然后使用composer.phar create-project symfony/framework-standard-edition /var/www/[PROJECTNAME] 2.4.* --prefer-dist 进行新安装。

额外补充:我使用Vagrant和VirtualBox,通过ssh运行命令。

这是错误报告的链接:http://pastebin.com/rFk4vfnL

以下是php --version的输出:

PHP 5.3.10-1ubuntu3.9 with Suhosin-Patch (cli) (built: Dec 12 2013 04:27:25)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

这是在 Windows 7 主机上运行的 Unix/Linux 客户端吗? - Jasper N. Brouwer
你能展示一下 php --versionphp --re 的输出吗?谢谢! - Lars Strojny
@JasperN.Brouwer Vagrant / Virtualbox 正在运行于 Windows 7 机器上。有关 php 的更多信息,请查看原始帖子。 - Arthur
3个回答

7
请删除Composer的缓存(~/.composer/cache/),然后再尝试一次。
另外:
- 您是否使用最新版本? (composer.phar selfupdate) - 您是否以有写权限的用户身份运行Composer,让其拥有对/var/www/projectname/内所有文件的写入权限?
更新:
Composer想要将doctrine脚本链接到您的bin目录中,但似乎在调用findShortestPath()时没有收到正确的路径。我之前从未见过这种情况 :(
如果我理解正确,您正在Vagrant客户端的同步文件夹内运行Composer:
1. 为什么要在客户机上运行Composer而不是在主机上运行? 2. 您能否在客户机的其他地方(不是同步文件夹)尝试运行Composer(安装项目)?这样您就能排除它与Windows 7共享文件夹有关的问题。
更新:
因此,问题出在在Windows 7主机的同步文件夹上运行Composer。下一步是获取Composer的源代码并调试LibraryInstaller::installBinaries()方法。首先请检查realpath($binPath) 这里是否返回了false或类似的内容。
但我必须再问一次:您为什么要这样做?通常,人们设置一个带有同步文件夹的Vagrant box以便在主机上进行开发,并在客户端(模拟生产服务器)上运行它。所以通常情况下,应该在主机上运行Composer而不是在客户端上运行……

我删除了缓存文件并在项目内进行了新的安装。仍然出现相同的错误。Vagrant中是否有一些缺失的环境变量? - Arthur
在非同步目录中运行Composer是可行的。 我正在通过SSH会话从我的Windows机器运行Composer到我的Virtualbox(Debian)机器。 - Arthur
我无法帮助调试,因为我没有Windows机器。但是你自己应该很容易做到 :) - Jasper N. Brouwer
嗨,Jasper,现在猴子已经出笼了;-)我不太确定哪个是主机,哪个是客户机。但是我正在我的Virtualbox的Debian发行版中运行安装脚本。 - Arthur
1
主机是“真实”的机器,也就是你在上面安装了Virtualbox的那台机器。客户机是在Virtualbox中运行的虚拟机 ;) - Jasper N. Brouwer
当然你想在客户系统上运行composer,否则你会得到像这样的错误:slim/slim 2.3.5 requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system. - alnorth29

0

尝试使用此安装说明来传递更多参数:

$ php composer.phar create-project symfony/framework-standard-edition /path/to/webroot/Symfony 2.4.1

0

根据@jasper的回答,我可以看出(从我的角度来看)composer在创建符号链接到您的bin文件夹时存在问题...这可能是由于文件系统不支持符号链接(主机的文件系统,然后与客户共享),一个好的测试是尝试在Linux上运行vagrant并查看问题是否仍然存在。

我唯一能想到的解决方法是在客户端全局安装依赖项(这有点违背使用Vagrant的初衷)。

请注意,我没有Windows机器进行测试,但在使用Samba共享和NTFS/FAT32文件系统时,符号链接问题曾经让我措手不及。


Composer有一些代码来处理像smb-mounts这样的符号链接。问题不在于创建符号链接,而在于确定用于创建符号链接的路径。PS:在nix主机上使用同步文件夹在nix客户端上运行composer可以完美地工作 :) - Jasper N. Brouwer
kewl @ composer 已经解决符号链接问题,好久没用过Windows了...@arthur你能发一下Vagrant和composer的配置吗?也许有什么问题。 - NiGhTHawK
我在Debian(主机)和Ubuntu(客户机)上遇到了这个问题。 - Gibbs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接