Proc_open和Capifony问题

时间:2013-03-19 14:01:48

标签: php symfony capistrano capifony proc-open

我正在尝试使用Capifony在Symfony2.1中使用我的Web应用程序来加速部署过程。

这是我的deploy.rb文件:

default_run_options[:pty] = true
set :application, "mywebsite"
set :domain,      "mywebsite.com"
set :deploy_to,   "~/git/mywebsite.git"
set :app_path,    "app"

set :repository,  "git@github.com:myname/mywebsite.git"
set :scm,         :git
# Or: `accurev`, `bzr`, `cvs`, `darcs`, `subversion`, `mercurial`, `perforce`, or `none`
set :user, "myserveruser"  # The server's user for deploys


set :model_manager, "doctrine"
# Or: `propel`

role :web,        domain                         # Your HTTP server, Apache/etc
role :app,        domain                         # This may be the same as your `Web` server
role :db,         domain, :primary => true       # This is where Symfony2 migrations will run

set :use_composer, true
set :update_vendors, true


set :use_sudo,      false
set :keep_releases,  3
set :shared_files,      ["app/config/parameters.yml"]
set :shared_children,   [app_path + "/logs", web_path + "/uploads"]

set :deploy_via, :rsync_with_remote_cache
set :ssh_options, { :forward_agent => true }
ssh_options[:keys] = %w(/.ssh/id_rsa)
ssh_options[:port] = xxxx


# Be more verbose by uncommenting the following line
logger.level = Logger::MAX_LEVEL

这是我的错误:

 The Process class relies on proc_open, which is not available on your PHP installation.

当脚本运行php composer.phar update

更多详细信息:http://pastebin.com/hNJaMvwf

但是我在共享托管中,我的托管服务员告诉我,我不能启用proc_open,有没有办法让它工作呢?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

Composer需要能够运行命令行进程(它使用symfony / process组件执行此操作)。如果您的主机不支持proc_open,则无法运行Composer。

作为替代部署策略,您可以手动将vendor/目录上传到生产计算机(您可以使用Capistrano配方中的upload functionality)。也就是说,虚拟服务器现在可以负担得起,我不建议将Symfony2应用程序部署到共享主机。也许您应该寻找不同的托管解决方案?

答案 1 :(得分:1)

使用Composer为Mediawiki安装安装Sematic扩展时,我的Web主机也遇到了类似(但不同)的问题。我没有使用Cafinony,而是使用Putty和SSH在“远程”命令行上运行Composer。Composer失败并出现同样的错误;

Process类依赖于proc_open,这在PHP安装中不可用。

然而,我能够以另一种方式解决它。

proc_open是一个PHP函数,通常由大多数Web主机“禁用”。通过将函数包含在使用PHP配置设置disable_functions设置的禁用函数列表中来禁用它。换句话说,如果它是包含在列表中的它被禁用;如果从列表中删除它,则启用它。

因此,您可以使用php命令行-d选项删除禁用的函数(包括proc_open),从而有效地启用proc_open。换句话说,通过删除disable_functions列表,您可以有效地“启用所有”功能,包括proc _pen。

要使用-d启用proc_open,必须将disable_functions设置为空字符串。这将删除所有已禁用的功能列表(包括proc_open)

使用SSH客户端(如Putty)在命令行安装时,请使用与此类似的命令:

php -f composer.phar -d detect_unicode = Off -d disable_functions = require mediawiki / semantic-media-wiki“1.9。*,> = 1.9.0.1”

所以,如果你能找到一种方法来通过你的ruby文件传递“-d settings”,你可以解决你的问题。

我知道这并不能完全解决您的问题,但它可以帮助其他人克服共享服务器上令人烦恼的默认php设置,这会妨碍Composer!

我希望这有助于某人。