Проблема Proc_open и Capifony

Я пытаюсь использовать Capifony с моим веб-приложением в Symfony2.1 для ускорения процесса развертывания.

Вот мой файл 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 ответа

Решение

Composer должен иметь возможность запускать процессы командной строки (он делает это с помощью компонента symfony/process). Невозможно запустить Composer, если ваш хост не поддерживает proc_open.

В качестве альтернативной стратегии развертывания вы можете загрузить vendor/ вручную на производственный компьютер (вы можете использовать функцию загрузки в рецепте Capistrano). Тем не менее, в наши дни виртуальные серверы доступны по цене, и я бы не рекомендовал развертывать приложения Symfony2 на общем хостинге. Может быть, вы должны искать другое решение для хостинга?

Я также столкнулся с аналогичной (но другой) проблемой с моим веб-хостом при использовании Composer для установки расширения Sematic для моей установки Mediawiki. Я не использовал Cafinony, но использовал Putty и SSH для запуска Composer в "удаленной" командной строке. Composer не удалось с той же ошибкой;

Класс Process опирается на proc_open, который недоступен в вашей установке PHP.

Однако я смог исправить это по-другому.

proc_open - это функция PHP, которая обычно "отключается" большинством веб-хостов. Она отключается включением функции в список отключенных функций, которые установлены с помощью параметра конфигурации PHP, disable_functions. Другими словами, если она включена в список отключен, если он удален из списка, он включен.

Поэтому вы можете эффективно включить proc_open "на лету", используя опцию php в командной строке -d для удаления отключенных функций (включая proc_open). Другими словами, удаляя список disable_functions, вы эффективно "включаете все" функции, включая proc _pen.

Чтобы использовать -d для включения proc_open, вы должны установить для параметра disable_functions пустую строку. Это удалит весь список отключенных функций (включая proc_open)

При установке в командной строке с использованием SSH-клиента, такого как Putty, используйте команду, подобную этой:

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

Так что, если вы сможете найти способ передать "-d settings" с вашим файлом ruby, вы сможете решить вашу проблему.

Я знаю, что это не полностью решает вашу проблему, но может помочь другим в преодолении надоедливых настроек php по умолчанию на общих серверах, которые мешают Composer!

Я надеюсь, что это помогает кому-то.

Другие вопросы по тегам