Capistrano 3 dynamic_sitemaps的配方

时间:2014-05-28 09:38:30

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

我正试图“翻译”Capistrano配方,以部署dynamic_sitemaps与Capistrano 3合作。

自述文件中建议的片段如下所示:

after "deploy:update_code", "sitemaps:create_symlink"

namespace :sitemaps do
  task :create_symlink, roles: :app do
    run "mkdir -p #{shared_path}/sitemaps"
    run "rm -rf #{release_path}/public/sitemaps"
    run "ln -s #{shared_path}/sitemaps #{release_path}/public/sitemaps"
  end
end

但这与Capistrano 3不兼容。我将此代码粘贴到config / deploy.rb中,我得到的第一个错误是:不知道如何构建任务'sitemaps:create_symlink'`

我读到在Capistrano 3中必须在调用之前定义命名空间的地方,因此我颠倒了块的顺序,首先定义namespace并最后调用after。我得到了 NoMethodError:未定义的方法`map':roles:Symbol`

所以我将命名空间块重写为:

namespace :sitemaps do
  task :create_symlink do 
    on roles(:web) do
      run "mkdir -p #{shared_path}/sitemaps"
      run "rm -rf #{release_path}/public/sitemaps"
      run "ln -s #{shared_path}/sitemaps #{release_path}/public/sitemaps"
    end
  end
end

现在我正在不知道如何构建任务'deploy:update_code'而且我很遗憾。

1 个答案:

答案 0 :(得分:0)

虽然我无法准确解决上面发布的问题,但解决方案实际上非常简单。如果使用Capistrano 3,只需将public/sitemaps添加到:linked_dirs设置中即可:

set :linked_dirs, %w{bin log tmp vendor/bundle public/system public/sitemaps}

这会在#{release_path}/public/sitemaps#{shared_path}/public/sitemap之间创建一个符号链接,如果需要,可以创建后者。