【问题标题】:Capistrano 3 recipe for dynamic_sitemaps动态站点地图的 Capistrano 3 配方
【发布时间】:2014-05-28 09:38:30
【问题描述】:

我正在尝试“翻译” Capistrano 配方以部署 dynamic_sitemaps 以使用 Capistrano 3。

自述文件中建议的 sn-p 如下所示:

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'` em>。

我在某处读到,在 Capistrano 3 中,必须在调用之前定义命名空间,所以我颠倒了块的顺序,首先定义 namespace,最后调用 after。我得到了 NoMethodError: undefined method `map' for :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',我不知所措。

【问题讨论】:

  • 这个 update_code 是在哪里定义的?这是你自己的方法还是任务
  • 显然 deploy:update_code 是一个有效的 Capistrano 任务。

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


【解决方案1】:

虽然我无法准确解决上面发布的问题,但解决方案实际上非常简单。如果使用 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 之间创建一个符号链接,如果需要,创建后者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    相关资源
    最近更新 更多