2015-06-17 25 views
6

Tôi sử dụng đá quý capistrano-env và tìm thấy một vấn đề nhỏ. Tập lệnh triển khai của tôi là:quyền đối với 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 

Và mã này tạo .env tệp trên máy chủ sau khi triển khai. Nhưng! .env quyền tệp là 640 và tập lệnh PHP của tôi không thể đọc được. Tôi có thể chạy lệnh chmod sau mỗi lần triển khai, nhưng có thể tồn tại một giải pháp tốt khác?

EDIT

Tôi tạo ra pull request và thêm tùy chọn mới filemode vào đá quý này. Vì vậy, bây giờ là giải pháp:

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 

Trả lời

5

Bạn có một vài tùy chọn để làm đẹp hơn.

  1. Không giống như capistrano-env hỗ trợ cài đặt quyền tùy chỉnh, nhưng có lẽ tính năng đó có thể được thêm vào! Open an issue at GitHub và có thể người bảo trì dự án sẽ thêm nó.

  2. Bạn có thể sửa đổi deploy.rb để chạy lệnh chmod cần thiết cho bạn. Bằng cách đó bạn sẽ không phải tự chạy chmod sau mỗi lần triển khai.

Something như thế này:

# 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

Cảm ơn bạn đã trả lời. Bây giờ tôi đang sử dụng tùy chọn # 2, nhưng tôi nghĩ về giải pháp tốt hơn. Ok tôi sẽ thử mở vấn đề mới tại GitHub. – stepozer

+0

Tôi đã tạo yêu cầu kéo vào đá quý này. Xem câu trả lời cập nhật của tôi. – stepozer

+0

Chúc mừng bạn đã nhận được PR hợp nhất! –

4

Nhìn vào capevn code tải lên được thực hiện trong một nhiệm vụ duy nhất. Bạn có thể ghi đè cục bộ định nghĩa của tác vụ đó để bạn có thể thay đổi quyền của tệp. Đặt một cái gì đó như sau trong 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

Cảm ơn bạn @Joshua cho mẫu mã. Tôi đã tạo yêu cầu pull trên github và thêm tùy chọn mới vào gem này. Xem câu trả lời cập nhật của tôi. – stepozer

+0

@stepozer Gọn gàng! Công việc tuyệt vời với yêu cầu kéo. – Joshua

Các vấn đề liên quan