2011-01-10 8 views
8

Mỗi khi tôi chạy , hãy triển khai trong máy chủ từ xa Tôi mất một số tập tin không phiên bản vì capistrano tạo một thư mục mới và kiểm tra sửa đổi đầu trong đó. Nhưng có một số tệp không được phiên bản như hình đại diện của người dùng (kẹp giấy) và hình ảnh đã tải lên mà không được sao chép sang bản phát hành mới hiện tại.Giữ các tập tin không phiên bản khi triển khai với Capistrano

Làm cách nào để giải quyết vấn đề này?

Cảm ơn!

Trả lời

14

Cá nhân, tôi nghĩ cách tốt nhất để giải quyết những điều đó là lưu trữ chúng trong thư mục được chia sẻ và tạo một tác vụ bằng capistrano để tạo liên kết tượng trưng cho nội dung được chia sẻ.

Dưới đây là một ví dụ từ một trong những dự án của tôi:

set :shared_assets, %w{public/images/products public/images/barcodes} 

namespace :assets do 
    namespace :symlinks do 
    desc "Setup application symlinks for shared assets" 
    task :setup, :roles => [:app, :web] do 
     shared_assets.each { |link| run "mkdir -p #{shared_path}/#{link}" } 
    end 

    desc "Link assets for current deploy to the shared location" 
    task :update, :roles => [:app, :web] do 
     shared_assets.each { |link| run "ln -nfs #{shared_path}/#{link} #{release_path}/#{link}" } 
    end 
    end 
end 

before "deploy:setup" do 
    assets.symlinks.setup 
end 

before "deploy:symlink" do 
    assets.symlinks.update 
end 
+0

Tôi hiểu nhưng ... rằng "chia sẻ" dir là một điều capistrano, Rails không biết về nó như xa như tôi biết. Vì vậy, làm thế nào để tôi giả sử để nói cho đường ray để lưu các tập tin trong thư mục đó, đó là bên ngoài ứng dụng và nó không sự kiện tồn tại trong bản sao địa phương của tôi? – emzero

+0

Bạn không thay đổi bất kỳ thứ gì trong Rails. Đó là điểm của chiến thuật này. Đường ray vẫn lưu hình ảnh vào "RAILS_ROOT/public/images/avatars" hoặc bất kỳ điều gì, nhưng thư mục đó thực sự là [symlink] (http://en.wikipedia.org/wiki/Symbolic_link) vào một thư mục trong "chia sẻ" của capistrano thư mục. – idlefingers

+1

Ồ, vâng, bạn nói đúng ... Tôi đã không nhìn thấy nó. Cảm ơn! =) – emzero

8

Thêm đường dẫn của bạn để shared_children cũng làm việc và thực sự chỉ là một lớp lót trong deploy.rb của bạn:

set :shared_children, shared_children + %w{public/uploads} 

tìm thấy nó ở đây: astonj

0

Đây là đá quý rất nhỏ và hữu ích: https://github.com/teohm/capistrano-shared_file. Kiểm tra tài liệu của đá quý - mọi thứ đều đơn giản.

Cài đặt đá quý, trong deploy.rb cần nó và chỉ cần cung cấp một loạt các tập tin mà bạn muốn chia sẻ giữa các phiên trong shared_files tùy chọn:

set :shared_files, %w(config/database.yml) 

Lưu trữ các file của bạn tại <project_dir>/shared/files/YOUR_FILE_GOES_HERE. Và chúng sẽ được liên kết với gốc của ứng dụng của bạn tại mỗi lần triển khai. Đó là tất cả.