2015-06-17 24 views
6

Io uso gemma capistrano-env e ho trovato un piccolo problema. Il mio script deploy è:permessi file capistrano-env

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 

E questo codice creare .env file sul server dopo deploy. Ma! Le autorizzazioni di file .env sono 640 e il mio script PHP non può leggerlo. Posso eseguire il comando chmod dopo ogni distribuzione, ma probabilmente esiste un'altra soluzione piacevole?

EDIT

ho creato pull request e aggiungere nuova opzione filemode in questo gioiello. Così, ora la soluzione è:

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 

risposta

5

Hai un paio di opzioni per rendere questo più bello.

  1. Non sembra come Capistrano-ENV supporta un'impostazione autorizzazioni personalizzate, ma forse questa caratteristica potrebbe essere aggiunto! Open an issue at GitHub e forse il manutentore del progetto lo aggiungerà.

  2. Si potrebbe modificare il vostro deploy.rb di eseguire il comando necessaria chmod per voi. In questo modo non dovrai eseguire manualmente chmod dopo ogni distribuzione.

Qualcosa di simile a questo:

# 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

Grazie per la risposta. Ora sto usando l'opzione n. 2, ma ho pensato a una soluzione più bella. Ok, proverò ad aprire un nuovo problema su GitHub. – stepozer

+0

Ho creato una richiesta di pull in questa gemma. Vedi la mia risposta aggiornata. – stepozer

+0

Congratulazioni per la fusione del PR! –

4

Guardando il capevn code l'upload è fatto in una singola attività. È possibile sovrascrivere localmente la definizione di tale attività in modo da poter modificare le autorizzazioni del file. Metti qualcosa di simile 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

Grazie a @Joshua per l'esempio del codice. Ho creato una richiesta pull su github e ho aggiunto una nuova opzione a questa gemma. Vedi la mia risposta aggiornata. – stepozer

+0

@stepozer Neat! Ottimo lavoro con la richiesta di pull. – Joshua