我正试图“翻译”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'而且我很遗憾。
答案 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
之间创建一个符号链接,如果需要,可以创建后者。