Проблема 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!
Я надеюсь, что это помогает кому-то.