capistrano的Capfile条件要求基于阶段

时间:2017-01-27 06:45:55

标签: capistrano capistrano3

我希望仅在舞台不是制作时才需要capistrano/postgresql。 但是,此Capfile始终需要capistrano/postgresql,因为fetch(:stage)为空。 (Capfile中的puts fetch(:stage) || "no stage"打印"没有阶段")

require 'capistrano/bundler'
require 'capistrano/npm'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano/puma'
require 'capistrano/puma/nginx'
require 'capistrano/postgresql' unless fetch(:stage) == "production"
require 'capistrano/secrets_yml'

我应该将require 'capistrano/postgresql'放在config / deploy / staging.rb等中。(我不知道它是否有效)?

或者还有其他简洁的方法吗?

修改

如果我将require 'capistrano/postgresql'放在config / deploy / staging.rb中,则会出现以下错误。

WARNING: load:defaults has already been invoked and can no longer be modified.
Check that you haven't loaded a Capistrano plugin in deploy.rb by mistake.
Plugins must be loaded in the Capfile to initialize properly.
(Backtrace restricted to imported tasks)
cap aborted!
can't modify frozen #<Class:#<Rake::Task:0x007fd8bcd22868>>

1 个答案:

答案 0 :(得分:1)

在Capefile中添加

task :use_postgresql do
  require 'capistrano/postgresql'
end

task 'staging' => [:use_postgresql]

那样,capistrano将仅在登台环境时使用posgresql