2016-09-30 2 views
0

Ich versuche, eine reine Implementierung von GraphAwares Neo4j PHP Client einzurichten, die ReadMe folgt. Ich arbeite an PHP 7.0.8-0ubuntu0.16.04.2 (CLI) (NTS)Vermeiden von sudo mit Composer

Um dies zu arbeiten, finde ich, dass ich sudo mit Composer verwenden muss, gegen die Warnungen von Composer selbst gegeben.


I Composer installiert haben, wie folgt (instructions)

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" 
sudo php composer-setup.php 

Dies führte zu folgenden Erfolgsmeldung:

Composer successfully installed to: /home/blackslate/composer.phar 

ich dann Komponist bewegt, so dass sie global verfügbar ist wie beschrieben here:

sudo mv /home/blackslate/composer.phar /usr/local/bin/composer 

Als nächstes installierte ich den neuesten Neo4j-php-Client:

sudo apt-get install php-bcmath 
sudo composer require graphaware/neo4j-bolt 
composer require graphaware/neo4j-php-client:^4.0 

Die Installation und grundlegende Verwendung Anweisungen, um die ersten beiden Schritte nicht oben sind, aber der letzte Befehl nicht ohne sie.

Die zweite Linie zeigte eine Warnung nicht Composer als root ausführen, aber wenn ich es nicht täte, dann bekam ich folgende Fehlermeldung:

Installation failed, reverting ./composer.json to its original content. 


[ErrorException]                
file_put_contents(/home/blackslate/vendor/composer/installed.json): failed 
to open stream: Permission denied 

Dieses ein Verzeichnis namens Anbieter in meinem Home-Verzeichnis installiert. Ich habe es in mein Projektverzeichnis verschoben.


schließlich in meinem Projektordner, habe ich eine Datei mit folgendem Skript namens index.php:

<?php 

require_once 'vendor/autoload.php'; 

use GraphAware\Neo4j\Client\ClientBuilder; 

$client = ClientBuilder::create() 
    ->addConnection('default', 'http://neo4j:[email protected]:7474') // Example for HTTP connection configuration (port is optional) 
    ->addConnection('bolt', 'bolt://neo4j:[email protected]:7687') // Example for BOLT connection configuration (port is optional) 
    ->build(); 

ich jetzt ein Verzeichnis mit dem folgenden Aufbau haben:

index.php   // as shown above 
vendor/    // the directory installed by Composer 
     autoload.php 
     composer/ 
     graphaware/ 
     guzzlehttp/ 
     myclabs/ 
     psr/ 
     symfony/ 

Alles scheint zu funktionieren wie erwartet.

Meine Frage ist: Gibt es eine Möglichkeit, die ich hätte erreichen können, ohne sudo Composer zu verwenden?

Antwort

1

Sie sollten Sudo in der Tat nicht verwenden. Zweitens sollten Sie den Client in Ihrem Projektordner benötigen, nicht nur in Ihrem Home-Verzeichnis.

Es ist nicht erforderlich, eine Schraube zu benötigen, da dies eine implizite Abhängigkeit des Clients selbst ist.

Für die Erweiterung bcmath wird es in der README als obligatorische Erweiterung zur Installation erwähnt.

+0

Also, wenn ich Sudo nicht verwende, wie bekomme ich die Installation zum Erfolg? –

+1

@JamesNewton Wenn Sie 'composer require' zum ersten Mal mit sudo ausführen, erstellt der Compiler Dateien (namentlich' composer.json', 'composer.lock' und möglicherweise das' vendors'-Verzeichnis) mit Berechtigungen, die der zweite 'composer erfordern' Ohne Sudo konnte ich ihnen nicht schreiben.Wenn Sie in Ihrem Projektverzeichnis ohne sudo den ersten 'composer require' ausgeführt hätten, wären Sie nicht auf Probleme gestoßen. Sie könnten auch die Eigentumsrechte/Berechtigungen für diese sudo-erstellten Dateien geändert haben, damit Ihr Basisbenutzer darauf zugreifen kann. –