Czy istnieje sposób uruchamiania polecenia composer update
w naszym środowisku produkcyjnym/testowym?Jak uruchomić aktualizację kompozytora na serwerze PHP?
Problem polega na tym, że nie mam dostępu do wiersza poleceń.
Czy istnieje sposób uruchamiania polecenia composer update
w naszym środowisku produkcyjnym/testowym?Jak uruchomić aktualizację kompozytora na serwerze PHP?
Problem polega na tym, że nie mam dostępu do wiersza poleceń.
Tak. istnieje rozwiązanie. ale może wymagać pewnej konfiguracji serwera ... i niektóre z nich są domyślnie zabronione ze względu na zagrożenie bezpieczeństwa !!
pobieranie composer.phar
https://getcomposer.org/download/ - to jest PHP Archive które mogą być pozyskiwane poprzez Phar()
i wykonywane jako zwykłej bibliotece.
utwórz nowy plik php i umieść go w internetowym folderze publicznym. tj /public/composer.php
lub pobrania w https://github.com/whipsterCZ/laravel-libraries/blob/master/public/composer.php
Configuration
<?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);
}
Wyodrębnianie kompozytor biblioteka
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);
}
działa Kompozytor Komenda
// 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";
}
Ale Lepiej będzie wykonaniecomposer install
według composer.lock która jest ostatnia konfiguracja zależność przetestowany z lokalnym środowisku
Jedyną zmianą jest
$args = array('command' => 'install');
czy to jest ok? – WhipsterCZ
Jest o wiele lepiej :) – Epodax
Można to zrobić także: 1) Pobierz najnowszy composer.phar 2) Wykonaj polecenie ze skryptu PHP, aby zrobić to, co jest w rzeczywistości, korzystając z pobranego pliku kompozytora
To rozwiązanie tymczasowe, ale może działać natychmiastowo.
To naprawdę może być zły pomysł, ale proszę wyjaśnij dlaczego. Nie ograniczaj się do głosowania. – MilanG
Najlepiej NIE uruchamiać komend Composer na serwerze produkcyjnym, ale poza nim. Miej skrypt wdrażania - Twój kod musi zostać umieszczony na serwerze i nie powinno to mieć znaczenia, jeśli dodasz zależności na serwerze po przesłaniu kodu lub przed przesłaniem.
Przepływ pracy będzie wyglądał następująco: wypróbuj lokalny komputer, wyślij kod z repozytorium, uruchom composer install
, a następnie prześlij wszystko na serwer. To brzmi jak scenariusz czterech linii do mnie:
git archive master | tar -x -C /deploy/application
pushd /deploy/application && composer install
popd
scp /deploy/application [email protected]:/srv/www/htdocs
Tak, to trzeba trochę obsługi błędów w przypadku gdy coś pójdzie nie tak, aby zatrzymać skrypt z wdrożeniem jałowy witrynę. Również optymalizacja przesyłania za pomocą rsync
byłaby sugestią.
Nie można użyć terminala? – gcampbell
Nie, nie mogę. To jest powód, dla którego należy pytać: – WhipsterCZ
[nie powinieneś uruchamiać 'aktualizacji kompozytora', ale' zainstalować kompozytor' na swoim pliku blokującym] (https://daylerees.com/the-composer-lock-file/) - oczywiście nie możesz rób to albo, ale to wymaga wzmianki. – Gordon