我们正在使用Mina在从Capistrano切换后部署我们的Rails4应用程序。在上限中我们可以cap production deploy:invoke task="namespace:taskname"
,其中invoke任务是一个自定义部署任务,它接受参数在给定环境中执行指定的rake任务。
如何将参数传递给mina以运行指定的rake任务?
到目前为止,我见过的最接近mina的论点是mina deploy to=staging
。
我正在寻找接近mina invoke namespace:taskname
的用法,该用法将进入app的/ current目录并执行bundle exec rake namespace:taskname
。
这看起来很简单,我错过了什么?
修改 根据Guy Teube在/config/deploy.rb中的建议,我现在有了
set :task, ENV['TASK']
set :current, "#{deploy_to}/current"
desc "Invokes a raketask"
task :invoke => :environment do
queue "cd #{current} && bundle exec rake #{task}"
end
正在运行mina invoke TASK=old:votes --simulate
无效,输出“cd /home/deployer/apps/manabalss/current && bundle exec rake
”
(注意在没有考虑TASK环境变量的情况下终止的字符串。
答案 0 :(得分:3)
当我明白here时,mina基本上是耙子,可以简单地说:
rake mytask var=foo
p ENV['var'] # => "foo"
然后不需要set:
行,只需按原样使用环境变量。
这个mina任务需要一个环境变量" task"。
desc "Invokes a raketask"
task :invoke => :environment do
queue! "cd #{current}"
queue! "bundle exec rake #{ENV['task']} RAILS_ENV=production"
end
然后只需用:
调用它mina invoke task=namespace:taskname
如果需要指定部署环境,请将任务修改为
queue! "bundle exec rake #{ENV['task']} RAILS_ENV=#{ENV['to']}"
用
打电话mina invoke task=namespace:taskname to=staging
答案 1 :(得分:1)
很长一段时间,但我会留下我的分数。
可能只是为服务器上需要的每个rails任务创建一个mina任务。 在我的情况下,我需要为团队提供一些简单的东西:
mina deploy_prod
and
mina deploy_beta
为此,我在部署块之外创建了这些任务:
task :deploy_prod => :environment do
set :rails_env, 'production'
set :branch, 'master'
set :deploy_to, '/var/www/site'
@command_valid = true
invoke :deploy
end
task :deploy_beta => :environment do
set :rails_env, 'development'
set :branch, 'dev'
set :deploy_to, '/var/www/site_beta'
@command_valid = true
invoke :deploy
end
这个内部部署块,以确保每个人都可以选择上述任务:
to :before_hook do
unless @command_valid
puts "usage: mina [deploy_prod|deploy_beta] [-v]"
exit 1
end
end
答案 2 :(得分:0)
您可以使用在终端中呼叫mina时使用的环境变量。你可以这样做:
$ mina deploy TASK=namespace:taskname
当然,您需要使用deploy.rb
修改TASK
以获取ENV['TASK']
参数。
例如,当我使用此命令进行部署时,我可以将分支和域指定为mina
:
$ mina deploy DOMAIN=1.2.3.4 BRANCH=my_specific_branch
使用我的deploy.rb
:
set :user, 'my_app'
set :domain, ENV['DOMAIN']
set :identity_file, ENV['IDENTITY_FILE']
set :deploy_to, '/home/app'
set :repository, 'git@github.com:foo/bar.git'
set :branch, ENV['BRANCH'] || 'master'
答案 3 :(得分:0)
如果要求部署到不同的环境,请查看https://github.com/endoze/mina-multistage Mina的多阶段插件