Esiste un modo per eseguire il comando composer update
sul nostro ambiente di produzione/test?Come eseguire l'aggiornamento di Composer sul server PHP?
Il problema è che non ho accesso per la riga di comando.
Esiste un modo per eseguire il comando composer update
sul nostro ambiente di produzione/test?Come eseguire l'aggiornamento di Composer sul server PHP?
Il problema è che non ho accesso per la riga di comando.
Sì. c'è una soluzione. ma potrebbe richiedere qualche configurazione del server ... e alcuni di questi sono proibiti di default a causa di rischi per la sicurezza !!
scaricare composer.phar
https://getcomposer.org/download/ - questo è PHP Archive che può essere estratto tramite Phar()
ed eseguito come biblioteca normale.
creare un nuovo file php e posizionarlo nella cartella pubblica web. vale a dire /public/composer.php
o il download all'indirizzo https://github.com/whipsterCZ/laravel-libraries/blob/master/public/composer.php
configurazione
<?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);
}
Estrazione biblioteca compositore
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);
}
esecuzione Compositore Comando
// 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";
}
Ma meglio si esibiràcomposer install
, secondo composer.lock che è ultima configurazione dipendenza testato da ambiente locale
unico cambiamento è
$args = array('command' => 'install');
ok? – WhipsterCZ
È molto meglio :) – Epodax
È possibile farlo anche: 1) Scarica l'ultimo compositore.phar 2) Esegui un comando dallo script PHP per fare il wor utilizzando il file del compositore scaricato
Questa è una soluzione temporanea ma può funzionare per le necessità immediate.
Potrebbe essere davvero una cattiva idea, ma per favore spiega perché. Non limitarti a votare. – MilanG
L'idea migliore è NON eseguire comandi Composer sul server di produzione, ma al di fuori di esso. Avere uno script di implementazione: il codice deve essere inserito sul server in ogni caso e non dovrebbe importare se si aggiungono le dipendenze sul server dopo aver caricato il codice o prima del caricamento.
Il flusso di lavoro sarebbe come: Avere un computer locale, controllare il codice dal repository, eseguire composer install
e quindi caricare tutto sul server. Che suona come uno script di quattro linee a me:
git archive master | tar -x -C /deploy/application
pushd /deploy/application && composer install
popd
scp /deploy/application [email protected]:/srv/www/htdocs
Sì, avreste bisogno di un po 'di manipolazione in caso qualcosa vada storto errore, per fermare lo script dalla distribuzione di un sito non lavorativo. Inoltre, l'ottimizzazione dei caricamenti utilizzando rsync
sarebbe un suggerimento.
Non è possibile utilizzare un terminale? – gcampbell
No, non posso. Questo è il motivo per cui si chiede – WhipsterCZ
[non si dovrebbe eseguire 'compositore update', ma' compositore install' sul proprio lockfile] (https://daylerees.com/the-composer-lock-file/) - ovviamente non si può fallo anche tu, ma ha bisogno di essere menzionato. – Gordon