gpt4 book ai didi

ruby-on-rails-4 - 如何将参数传递给 mina 部署工具

转载 作者:行者123 更新时间:2023-12-04 02:05:12 26 4
gpt4 key购买 nike

我们正在使用 Mina从 Capistrano 切换后部署我们的 Rails4 应用程序。在上限上,我们可以执行 cap production deploy:invoke task="namespace:taskname" 其中调用任务是一个自定义部署任务,它接受参数以在给定环境中执行指定的 rake 任务。

如何将参数传递给 mina 以运行指定的 rake 任务?到目前为止,我见过的最接近于 mina 的参数是 mina deploy to=staging。我正在寻找接近 mina invoke namespace:taskname 的用法,它将 cd 到应用程序的/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 环境变量的字符串终止。

最佳答案

我恍然大悟 here , mina 本质上是 rake,可以简单地:

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

关于ruby-on-rails-4 - 如何将参数传递给 mina 部署工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26294976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com