【问题标题】:Capistrano and CarrierwaveCapistrano 和载波
【发布时间】:2012-05-14 15:38:54
【问题描述】:

我正在使用 Capistrano 部署 Ruby on Rails 和 NodeJS 应用程序。每次部署时都会删除上传文件夹。

这在几个地方弹出,但似乎不起作用:

# Keep File Uploads
  task :symlink_uploads do
    run "ln -nfs #{shared_path}/rails/uploads  #{release_path}/rails/public/uploads"
  end

  after 'deploy:update_code', 'deploy:symlink_uploads'

回购:

  repo:
    /node
    /rails

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby deployment capistrano carrierwave


    【解决方案1】:

    这个问题还有另一种解决方案。您可以将您的uploads 目录添加到 Capistrano 的shared_children,它会自动完成所有的魔法。您可以在此答案中找到更多详细信息:https://stackoverflow.com/a/9710542/835935

    【讨论】:

    • 我也试过这个。如果 rails 在 repo 的根目录中,它会起作用。日志和系统使用它,我怀疑他们的符号链接也不起作用。
    【解决方案2】:

    确保删除现有的 public/uploads 文件夹,将 -f 传递给 ln 不包括删除目标目录(或者至少对我来说没有这样做)

    我的符号链接目录任务通常看起来像

    task :symlink_uploads do
      run "rm -rf #{release_path}/rails/public/uploads} && ln -nfs #{shared_path}/rails/uploads  #{release_path}/rails/public/uploads"
    end
    

    显然要确保您需要的公共/上传的签入版本中没有任何内容!

    【讨论】:

    • 不。没用。也许我需要添加其他东西?这似乎是个好方法
    • 权限有问题,-nFs 也有问题,还必须从 repo 中删除上传文件夹。我会在可能的时候给你赏金。
    【解决方案3】:

    你试过了吗

    after 'deploy:update_code', ':symlink_uploads'
    

    您的:symlink_uploads 任务不在命名空间中,因此请执行上述操作或将其放入命名空间中

    namespace :deploy do
      task :symlink_uploads do
        # ...
      end
    end
    

    【讨论】:

    • 好的,抱歉 - 觉得这太容易了 :)
    【解决方案4】:

    我在使用我的 RoR 应用程序上传文件时遇到了类似的问题。这是我的 capistrano 任务:

    ...
    task :link_public_folder, :roles => [:app, :web] do
        run "mv -u #{release_path}/public/* #{shared_path}/public"
        run "rm -rf #{release_path}/public"
        run "ln -s #{shared_path}/public #{release_path}/public"
      end
      after "deploy:update", "deploy:link_public_folder"
    
      task :setup_config, :roles => :app do
        sudo "ln -nfs #{current_path}/config/apache.conf /etc/apache2/sites-available/#{application}"
        run "mkdir -p #{shared_path}/config"
        run "mkdir -p #{shared_path}/public"
        put File.read("config/database.yml"), "#{shared_path}/config/database.yml"
        puts "Now edit the config files in #{shared_path}."
      end
      after "deploy:setup", "deploy:setup_config"
    ...
    

    或许能帮到你

    编辑: 我也用 Carrierwave。

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多