2016-07-14 8 views
0

ich diesen Rake Aufgabe haben, die lokal funktioniert:Heroku Rake Aufgabe ausgeführt Shell-Skript nicht

namespace :backup_to_s3 do 
    task run: :environment do 
    puts "Started S3 backup" 
    # create .pgpass so we don't have to enter the password 
    entry = "#{ENV['RDS_DB_HOSTNAME']}:*:*:#{ENV['RDS_DB_SUPER_USERNAME']}:#{ENV['RDS_DB_SUPER_PASSWORD']}" 
    `echo '#{entry}' > ~/.pgpass; 
    chmod 0600 ~/.pgpass; 
    bash backup_to_s3.sh` 
    puts "Finished S3 backup" 
    end 
end 

Beachten Sie, dass es einen Anruf tätigt ein Shell-Skript auszuführen. Hier ist der Shell-Skript:

#!/bin/bash 

backupTime=`date +%Y%m%d-%H:%M` 
S3Bucket=$S3_BUCKET_NAME 
RDSHostname=$RDS_DB_HOSTNAME 
RDSUsername=$RDS_DB_SUPER_USERNAME 
RDSDatabaseName=$RDS_DB_NAME 

pg_dump -Fc ${RDSDatabaseName} -h ${RDSHostname} -U ${RDSUsername} --no-password | gzip -9 | \ 
s3cmd put - s3://${S3Bucket}/postgres.${RDSDatabaseName}.dump.${backupTime}.gz 

Wie ich schon sagte, dies alles vor Ort arbeitet, und die puts Logging-Anweisungen arbeiten. Auf Heroku wird die Task ausgeführt, aber die Anweisungen puts werden sofort ausgeführt, was darauf hindeutet, dass die Systemaufrufe und das Shell-Skript nicht ausgeführt werden.

Ich bin verwirrt, warum das nicht funktioniert!

UPDATE 15.07

fand ich, dass Sie die PGPASSWORD Umgebungsvariable und die .pgpass-Datei erstellen vermeiden. Die Rake-Task führt das Shell-Skript immer noch nicht aus.

Antwort

0

Heroku stellt Ihnen keinen traditionellen virtuellen privaten Server zur Verfügung, daher würde ich nicht davon ausgehen, dass Sie Zugriff auf das Home-Verzeichnis haben. Es ist sehr wahrscheinlich, dass Sie beim Erstellen der Datei .pgpass möglicherweise einen Fehler mit Berechtigung verweigert erhalten.

Versuchen Sie, Ihre Datei stattdessen in das relative Verzeichnis tmp/ Ihres Projekts "rails" zu stellen.

+0

Vielen Dank für die Beantwortung von Keith. Das war es, was ich zuerst dachte, aber ich habe 'heroku run bash' ausgeführt, um zu einer Shell-Eingabeaufforderung zu gelangen, und meine Rake-Aufgabe mit 'rake backup_to_s3: run' ausgeführt. Ich habe dann 'cat ~/.pgpass' ausgeführt, was die korrekte Ausgabe lieferte, also scheint es, als würde die Datei korrekt geschrieben werden und es dauert mindestens die Zeit, die ich in dieser Shell-Sitzung verbringe. – garrettqmartin8

Verwandte Themen