【问题标题】:Prevent certain folder in public folder from being removed capistrano rails防止公用文件夹中的某些文件夹被删除 capistrano rails
【发布时间】:2013-10-15 16:15:16
【问题描述】:

我有一个应用程序,用户可以上传图像,并通过 CarrierWave 将它们存储到名为 uploads/images/ 的文件夹中的公共文件夹中。

我刚刚注意到,自从我最近一次部署以来,上传(和图像)文件夹不再存在。

当我使用 Capistrano 部署时,它会删除生产服务器上的文件夹和文件吗?

我如何告诉它在所有部署中保持相同的 public/uploads 文件夹?

感谢堆栈!

【问题讨论】:

    标签: ruby-on-rails deployment capistrano


    【解决方案1】:

    我建议创建一个 capistrano 任务来创建指向共享文件夹的符号链接。符号链接将充当目录的链接,因此您的所有上传存储/检索代码都将正常工作。

    Capistrano 任务示例:

    before "deploy:restart", :symlink_directories
    task :symlink_directories do
      run "ln -nfs #{shared_path}/uploads #{release_path}/public/uploads"
    end
    

    【讨论】:

    • 你能推荐一个很好的演练/例子吗?我是 Rails 和 Capistrano 的新手,所以我还在学习。
    • 只需将上述任务放入您的 deploy.rb 并更改路径以适合您的应用程序
    • 所以我将任务放在了 deploy.rb 中,但是,当我导航到当前版本的 public/uploads 文件夹时,它说它无法解析符号链接“上传”。我的共享文件夹中实际上没有“公共/上传”。我应该手动创建吗?
    • 只要在你的共享文件夹中放一个uploads文件夹即可,不需要public文件夹。您应该手动创建它,但创建后,您不需要再次创建它。
    【解决方案2】:

    我想为那些希望使用 Capistrano v3.9.1 做同样事情的人更新这个答案

    在您的 deploy.rb 文件中,您可以添加以下内容

    set :linked_dirs,  %w{public/uploads/}
    

    正如上面的答案,这在部署期间将目录符号链接到版本中。

    非常适合我们不想覆盖内容的上传目录。

    有关您可以“设置”的变量的完整列表,请参阅capistrano docs here.

    【讨论】:

    • 您的回答应该包括一些解释以及所需的代码。
    • @svgrafov 我提供了更好的解释并链接到源代码。另请注意,所需的代码已经设置。没有双关语。
    • "另外注意,要求的代码已经设置好了" 肯定是有什么误解,因为我的意思是"你有源代码,那为什么不加解释呢?"
    猜你喜欢
    • 2018-05-01
    • 2014-12-13
    • 2014-09-03
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多