如何在Capfile中动态需要文件?

时间:2016-02-11 21:25:46

标签: ruby-on-rails capistrano

我使用capistrano-multiconfig gem进行多次部署的回购。问题是,对于某些应用程序,我想要sikideq任务。像这样的东西:

if fetch(:sidekiq_enabled?)
  require 'capistrano/sidekiq'
  require 'capistrano/sidekiq/monit'
end

我猜Capfile是在capistrano配置之前加载的。怎么处理这个?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的情况,我希望每个项目都需要一些宝石,因为我的命令行模式始终与执行capistrano任务相同,这就是我处理它的方式。

我的模式是这样的:

$ bundle exec cap project:stage namespace:task

解决方案是让我得到第一个参数(这里是project),以了解它是什么类型的项目,并需要项目的良好配方。

所以在Capfile中,我写了类似的东西

[...]

# Get project from the command line if any
current_project = ARGV[0].split(':')[0]
magento_projects = ["project_1"]
symfony_projects = ["project_2"]

# Include required tasks per project
if magento_projects.include?(current_project)
    require 'capistrano/magento'
end

if symfony_projects.include?(current_project)
    require 'capistrano/symfony'
end

[...]

现在当我输入:

$ bundle exec cap project_1:staging deploy

或者:

$ bundle exec cap project_2:production deploy:check

它需要不同的宝石。完成:))