2016-05-05 9 views
0

Ich habe CouchDB läuft auf einer Vagrant-Box. Ich möchte die Datenbank bei der Bereitstellung der Box erstellen. Um die db zu erstellen, benutze ich curl um einen PUT zu 127.0.0.1:5984/foo zu machen. Wenn ich das manuell mache, kein Problem. Die SSH-Eingabe in die Vagrant-Box und das Ausführen des Befehls funktionieren. Das Ausführen des Befehls auf dem Hostcomputer funktioniert. Aber wenn ich das Provisioning-Skript den Befehl ausführen, erhalte ich diesen Fehler: curl: (7) Failed to connect to 127.0.0.1 port 5984: Connection refused. Was ist das Problem?Vagrant curl Verbindung während der Bereitstellung abgelehnt

Vagrantfile

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |config| 
    config.vm.box = "ubuntu/trusty64" 
    config.vm.network "forwarded_port", guest: 5984, host: 5984, host_ip: "127.0.0.1" 
    config.vm.provision "shell", path: "./scripts/provision_vagrant.sh" 
end 

Antwort

1

Es gibt 2 Sache:

Zuerst wird, wenn Sie Ihren Befehl ausführen, nachdem Sie in die Box ssh'ing, werden Sie den Befehl als vagrant Benutzer ausgeführt werden, aber wenn Sie führen Sie Ihre Provisionierung Wie Sie gezeigt haben, führen Sie den Befehl tatsächlich als root aus; so zu respektieren, was du hast, wenn ssh'ing stellen Sie sicher, mit privileged: false Argument wie folgt auszuführen:

config.vm.provision "shell", privileged: false, path: "./scripts/provision_vagrant.sh" 

dies berücksichtigen, wenn Sie Ihre Shell-Skript schreiben, als ob Sie als root ausführen, brauchen Sie nicht die sudo

Zweitens, wenn Sie einen Prozess wie Couchdb starten dauert es ein wenig Zeit (einige Sekunden bis eine Minute abhängig von der Hardware), vollständig zu starten und verfügbar zu sein, das ist völlig in Ordnung und das gleiche für die meisten Prozesse (mysql, apache) also wann Wenn Sie das curl von Ihrem Skript ausführen, läuft es möglicherweise, während die Couch hochfährt und nicht vollständig verfügbar ist.

Am einfachsten ist es, gerade genug zu schlafen, damit der Server läuft - die ausgeklügeltste Version ist das Lesen der Ausgabeprotokolldatei, bis sie anzeigt, dass sie gestartet wurde.

+0

Vielen Dank für Ihre Antwort. Leider führt die Bereitstellung als Landstreicher zum selben Ergebnis. – maxhallinan

+0

Sind Sie sicher, dass Ihr couchdb-Dienst zum Zeitpunkt Ihrer Bereitstellungsläufe auf 5984 ausgeführt wird? –

+0

es läuft nicht. ich 'sudo stop couchdb', ändere eine Konfigurationsdatei und dann' sudo starte couchdb'. aber wenn ich "netstat -tulpn", zeigt es keinen Prozess auf ': 5984'. – maxhallinan