Есть ли способ запустить команду composer update
на нашей производственной/тестовой среде?Как выполнить обновление композитора на сервере PHP?
Проблема в том, что у меня нет доступа к командной строке.
Есть ли способ запустить команду composer update
на нашей производственной/тестовой среде?Как выполнить обновление композитора на сервере PHP?
Проблема в том, что у меня нет доступа к командной строке.
Да. есть решение. но это может потребовать некоторой конфигурации сервера ... , и некоторые из них запрещены по умолчанию из-за рисков безопасности!
загрузить composer.phar
https://getcomposer.org/download/ - это PHP архив, который может быть извлечен с помощью Phar()
и выполнен в виде регулярной библиотеки.
создать новый файл php и поместить его в общую папку общего пользования. т.е. /public/composer.php
или скачать на https://github.com/whipsterCZ/laravel-libraries/blob/master/public/composer.php
Конфигурация
<?php
//TODO! Some Authorization - Whitelisted IP, Security tokens...
echo '<pre>
______
/____/___ ____ ___ ____ ____ ________ _____
// /__ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
//___/ /_/////// /_///_/ (__ ) __//
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ UPDATE
/_/
';
define('ROOT_DIR',realpath('../'));
define('EXTRACT_DIRECTORY', ROOT_DIR. '/composer');
define('HOME_DIRECTORY', ROOT_DIR. '/composer/home');
define('COMPOSER_INITED', file_exists(ROOT_DIR.'/vendor'));
set_time_limit(100);
ini_set('memory_limit',-1);
if (!getenv('HOME') && !getenv('COMPOSER_HOME')) {
putenv("COMPOSER_HOME=".HOME_DIRECTORY);
}
Распаковка композитор библиотека
if (file_exists(EXTRACT_DIRECTORY.'/vendor/autoload.php') == true) {
echo "Extracted autoload already exists. Skipping phar extraction as presumably it's already extracted.\n";
}
else{
$composerPhar = new Phar("../composer.phar");
//php.ini set phar.readonly=0
$composerPhar->extractTo(EXTRACT_DIRECTORY);
}
работает Composer Command
// change directory to root
chdir(ROOT_DIR);
//This requires the phar to have been extracted successfully.
require_once (EXTRACT_DIRECTORY.'/vendor/autoload.php');
//Use the Composer classes
use Composer\Console\Application;
use Composer\Command\UpdateCommand;
use Symfony\Component\Console\Input\ArrayInput;
//Create the commands
$args = array('command' => 'update');
if(!COMPOSER_INITED) {
echo "This is first composer run: --no-scripts option is applies\n";
$args['--no-scripts']=true; }
}
$input = new ArrayInput($args);
//Create the application and run it with the commands
$application = new Application();
$application->setAutoExit(false);
$application->setCatchExceptions(false);
try {
//Running commdand php.ini allow_url_fopen=1 && proc_open() function available
$application->run($input);
echo 'Success';
} catch (\Exception $e) {
echo 'Error: '.$e->getMessage()."\n";
}
Но Лучше будет выступатьcomposer install
, согласно composer.lock, которая последняя конфигурация зависимости испытания от локального окружения
только изменение
$args = array('command' => 'install');
, так ли это? – WhipsterCZ
Это намного лучше :) – Epodax
Вы можете сделать это также: 1) Загрузите последнюю версию composer.phar 2) Выполните команду из скрипта PHP, чтобы сделать это, используя загруженный файл композитора
Это временное решение, но может работать для немедленной необходимости.
Это может быть плохая идея, но, пожалуйста, объясните, почему. Не просто голосуйте вниз. – MilanG
Лучшая идея - НЕ запускать команды Composer на производственном сервере, но вне его. Имейте сценарий развертывания - ваш код должен быть помещен на сервер в любом случае, и не имеет значения, добавляете ли вы зависимости на сервере после загрузки кода или перед загрузкой.
Рабочий процесс будет таким: иметь локальную машину, проверить свой код из репо, запустить composer install
, а затем загрузить все на сервер. Это звучит как сценарий в четыре строки мне:
git archive master | tar -x -C /deploy/application
pushd /deploy/application && composer install
popd
scp /deploy/application [email protected]:/srv/www/htdocs
Да, вы должны были бы некоторые обработки ошибок в случае, если что-то пойдет не так, чтобы остановить скрипт развертывания нерабочего сайта. Кроме того, оптимизация загрузки с использованием rsync
будет предложением.
Вы не можете использовать терминал? – gcampbell
Нет, я не могу. Вот почему попросите – WhipsterCZ
[вы не должны запускать 'comper update', но' composer install' в вашем файле блокировки] (https://daylerees.com/the-composer-lock-file/) - очевидно, вы не можете сделайте это, но это нужно упомянуть. – Gordon