【问题标题】:set :linked_files and set :linked_files for uploads in capistrano3为 capistrano3 中的上传设置 :linked_files 和设置 :linked_files
【发布时间】:2015-02-03 10:21:39
【问题描述】:

我正在尝试使用 capistrano3 将我的文件和文件夹上传到我的服务器。 我希望该文件夹在所有版本之间共享。例如,我有一个名为 media 的文件夹,它包含子目录和文件。我希望将它放在 Capistrano 3 创建的共享目录下。 这个我看过了

set :linked_files, %w{config/database.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}

有什么方法可以将媒体的所有文件和子目录上传到共享目录中。

注意:基本上我希望我的上传内容不受 capistrano3 的影响。有什么方法可以让我创建上传文件夹的结构,并且在我的 capistrano 部署中它会保持不变。 提前致谢。

【问题讨论】:

    标签: ruby ruby-on-rails-3 deployment capistrano capistrano3


    【解决方案1】:

    如果您希望在所有版本之间共享该文件夹,请将 media 目录添加到 linked_dirs

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

    然后写一个这样的任务:

    namespace :deploy do
      desc 'upload media files'
      task :upload_media_files do
        remote_path, local_path = "#{fetch(:deploy_to)}/shared/media", '/your/local/media/path'
        on release_roles :app do
          upload!(local_path, remote_path, recursive: true)
        end
      end
    end
    
    after 'deploy:check', 'deploy:upload_media_files'
    

    这是一个scp 命令。根据source code,命令为:scp -t -r /remote/shared/media

    如果你不想覆盖现有文件,你应该使用rsync

    namespace :deploy do
      desc 'upload media files'
      task :upload_media_files do
        remote_path, local_path = "#{fetch(:deploy_to)}/shared", '/your/local/media/path'
        on release_roles :app do |server|
          system("rsync -avzr #{local_path} #{fetch(:deployer)}@#{server.hostname}:#{remote_path}")
        end
      end
    end
    
    after 'deploy:check', 'deploy:upload_media_files'
    

    【讨论】:

    • 上传是否会像 rsync 一样工作,因为我不想覆盖freshrelease 上的文件/目录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2017-07-04
    相关资源
    最近更新 更多