如何将参数传递给mina deploy工具

时间:2014-10-10 08:25:45

标签: ruby-on-rails-4 deployment

我们正在使用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环境变量的情况下终止的字符串。

4 个答案:

答案 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的多阶段插件