2015-06-17 3 views
6

Ich benutze Edelstein capistrano-env und fand ein kleines Problem. Mein deploy Skript ist:capistrano-env Dateiberechtigungen

Capistrano::Env.use do |env| 
    env.add 'DB_DSN', 'mysql:host=localhost;dbname=dbname' 
    env.add 'DB_USER', 'user' 
    env.add 'DB_PASS', 'pass' 
end 

Und dieser Code erstellen .env Datei auf dem Server nach deploy. Aber! .env Dateiberechtigungen ist 640 und mein PHP-Skript kann es nicht lesen. Ich kann chmod Befehl nach jeder Bereitstellung ausführen, aber wahrscheinlich existieren andere nette Lösung?

EDIT

habe ich pull request und neue filemode Option in diesem Juwel hinzuzufügen. Also, jetzt ist die Lösung:

Capistrano::Env.use do |env| 
    env.add 'DB_DSN', 'mysql:host=localhost;dbname=dbname' 
    env.add 'DB_USER', 'user' 
    env.add 'DB_PASS', 'pass' 
    env.filemode = 0644 
end 

Antwort

5

Sie haben ein paar Optionen, um das schöner zu machen.

  1. Es sieht nicht so aus, als ob capistrano-env eine benutzerdefinierte Berechtigungseinstellung unterstützt, aber vielleicht könnte diese Funktion hinzugefügt werden! Open an issue at GitHub und vielleicht wird der Projektbetreuer es hinzufügen.

  2. Sie könnten Ihre deploy.rb ändern, um den erforderlichen Befehl chmod für Sie auszuführen. Auf diese Weise müssten Sie chmod nach jeder Bereitstellung nicht manuell ausführen.

Etwas wie folgt aus:

# In deploy.rb 
after "capenv:copy", "capenv:chmod" do 
    on roles(:all) do 
    execute "chmod", "a+r", "#{release_path}/#{Capistrano::Env.filename}" 
    end 
end 
+0

Vielen Dank für die Antwort. Jetzt benutze ich gerade Option # 2, aber ich habe mir eine bessere Lösung ausgedacht. Ok, ich werde versuchen, ein neues Problem bei GitHub zu öffnen. – stepozer

+0

Ich habe Pull Request in dieses Juwel erstellt. Siehe meine aktualisierte Antwort. – stepozer

+0

Herzlichen Glückwunsch zum Zusammenführen der PR! –

4

Mit Blick auf die capevn code der Upload wird in einer einzigen Aufgabe erledigt. Sie können die Definition dieser Aufgabe lokal überschreiben, um die Dateiberechtigungen zu ändern. Setzen Sie etwas wie folgt in deploy.rb

namespace :capenv do 
    desc 'copy .env to release_path' 
    task :copy do 
    on roles(:all) do 
     upload! StringIO.new(Capistrano::Env.to_s), "#{release_path}/#{Capistrano::Env.filename}", mode: 'a+r' 
    end 
    end 
end 
+0

Vielen Dank @Joshua für Codebeispiel. Ich habe Pull Request auf GitHub erstellt und eine neue Option in dieses Juwel eingefügt. Siehe meine aktualisierte Antwort. – stepozer

+0

@steposer Ordentlich! Gute Arbeit mit der Pull-Anfrage. – Joshua