0

我正在尝试在 Symfony2.1 中将 Capifony 与我的 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,有没有办法让它工作?

非常感谢你的帮助 !

4

2 回答 2

2

Composer 需要能够运行命令行进程(它使用 symfony/process 组件来做到这一点)。如果您的主机不支持 proc_open,则无法运行 Composer。

作为替代部署策略,您可以vendor/手动将目录上传到生产机器(您可以使用 Capistrano 配方中的上传功能)。话虽如此,虚拟服务器现在价格实惠,我不建议将 Symfony2 应用程序部署到共享主机。也许您应该寻找不同的托管解决方案?

于 2013-03-19T15:02:33.433 回答
1

在使用 Composer 为我的 Mediawiki 安装安装 Sematic 扩展时,我的网络主机也遇到了类似(但不同)的问题。我没有使用 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)

When installing at the command line using an SSH client such as Putty, use a command similar to this:

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

So, if you can figure out a way to pass "-d settings" with your ruby file, you may be able to solve your problem.

I know this does not fully address your problem, but it may help others with overcoming annoying default php settings on shared servers, that get in the way of Composer!

I hope this helps someone.

于 2014-01-19T11:15:03.237 回答