2010-04-03 23 views
7

Tôi đang sử dụng Capistrano và git để triển khai ứng dụng RoR. Tôi có một thư mục mà mỗi người dùng có thư mục riêng của họ. Khi người dùng tải lên hoặc lưu tệp, tệp sẽ được lưu trong thư mục của riêng họ.Làm cách nào để ngăn chặn capistrano ghi đè lên các tệp do người dùng tải lên trong các thư mục riêng của họ?

Khi tôi triển khai phiên bản mới của mã vào máy chủ, các tệp và thư mục người dùng sẽ bị ghi đè bằng những gì trên máy tính của tôi.

Có cách nào để bỏ qua một số thư mục trong capistrano, như chúng ta làm trong git không? Bài đăng này - http://www.ruby-forum.com/topic/97539 - đề xuất sử dụng các liên kết tượng trưng và lưu trữ các tệp người dùng trong một thư mục được chia sẻ. Nhưng đó là một bài cũ, vì vậy tôi tự hỏi nếu có một cách tốt hơn để làm điều đó ngay bây giờ.

Ngoài ra, có ai biết về bất kỳ chương trình truyền hình/hướng dẫn nào tốt để đề xuất sử dụng RoR + git + capistrano không?

Cảm ơn.

Trả lời

10

Bạn nên di chuyển thư mục của người dùng bên ngoài thư mục releases của Capistrano. Cách tiếp cận thông thường là để Capistrano tạo ra các liên kết tượng trưng cho các thư mục cần được bảo toàn trong suốt quá trình triển khai.

Dưới đây là một ví dụ từ ứng dụng blog Rails tôi config/deploy.rb theo đó các file để tải về trong bài đăng trên blog và hình ảnh sử dụng trong bài viết được lưu trữ trong một thư mục shared:

after :deploy, 'deploy:link_dependencies' 

namespace :deploy do 
    desc <<-DESC 
    Creates symbolic links to configuration files and other dependencies 
    after deployment. 
    DESC 
    task :link_dependencies, :roles => :app do 
    run "ln -nfs #{shared_path}/public/files #{release_path}/public/files" 
    run "ln -nfs #{shared_path}/public/images/posts #{release_path}/public/images/posts" 
    end 
end 
  • Để trả lời câu hỏi thứ hai của bạn, tôi khuyên bạn nên PeepCodeRailscasts
+0

Cảm ơn John, sau đó là liên kết tượng trưng. –

0

Điều này đã quá muộn nhưng tôi đã gặp sự cố này. Tôi sử dụng đường ray 5 và capistrano 3.6. Tôi đã giải quyết vấn đề này bằng cách tạo liên kết tượng trưng đến thư mục được chia sẻ.

Bạn đã có thể có dòng này trong deploy.rb

set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle} 

của bạn Nếu bạn muốn lưu hình ảnh của người dùng ở nơi công cộng/images/user_images và symlink nó vào thư mục chia sẻ sau đó thêm tên thư mục với một không gian (như thế này):

set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/images/user_images} 

Bây giờ chạy cap production deploy và bạn sẽ có thể truy cập hình ảnh trong thư mục dùng chung.

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