gpt4 book ai didi

rake - 为什么我的 Rake 任务不使用我在 Cap 命令中使用的环境?

转载 作者:行者123 更新时间:2023-12-01 00:57:15 35 4
gpt4 key购买 nike

我打电话 bundle exec cap staging demo:foo .
demo:foo Cap 任务调用 Rake 任务,打印出 Rails.env .

但是...... Rails 任务正在打印“开发”而不是预期的“暂存”。为什么要这样做?为什么不使用我传递给的任何环境 cap ?

我知道我可以添加 with rails_env: staging ,但我不想对环境进行硬编码。我希望能够在多个环境中使用这个 Cap 任务,并且我希望 Rake 使用我告诉 Cap 使用的任何东西。

### CAP TASK
namespace :demo do
desc "run a demo command"
task :foo do
on roles(:app) do
within release_path do
execute 'pwd'
execute :rake, 'grant:foo'
end
end
end
end

### RAKE TASK (called by above cap task)
namespace :grant do
desc "do-nothing demo task"
task :foo do
puts "args: #{ARGV}"
puts "Rails.env: #{Rails.env}"
puts "pwd: #{Dir.pwd}"
end
end

输出:
3404 ~/dev/myblog$ bundle exec cap staging demo:foo
DEBUG[40846cbf] Running /usr/bin/env if test ! -d /home/blog/rails_apps/blog/staging/current; then echo "Directory does not exist '/home/blog/rails_apps/blog/staging/current'" 1>&2; false; fi on 172.245.32.193
DEBUG[40846cbf] Command: if test ! -d /home/blog/rails_apps/blog/staging/current; then echo "Directory does not exist '/home/blog/rails_apps/blog/staging/current'" 1>&2; false; fi
DEBUG[40846cbf] Finished in 0.815 seconds with exit status 0 (successful).
INFO[8615517c] Running /usr/bin/env pwd on 172.245.32.193
DEBUG[8615517c] Command: cd /home/blog/rails_apps/blog/staging/current && /usr/bin/env pwd
DEBUG[8615517c] /home/blog/rails_apps/blog/staging/releases/20141031234442
INFO[8615517c] Finished in 0.230 seconds with exit status 0 (successful).
INFO[1afa8e9e] Running bundle exec rake grant:foo on 172.245.32.193
DEBUG[1afa8e9e] Command: cd /home/blog/rails_apps/blog/staging/current && bundle exec rake grant:foo
DEBUG[1afa8e9e] args: ["grant:foo"]
DEBUG[1afa8e9e] ENV: development <<<<<<<<< WHY IS THIS?
DEBUG[1afa8e9e] pwd: /home/blog/rails_apps/blog/staging/releases/20141031234442
INFO[1afa8e9e] Finished in 1.491 seconds with exit status 0 (successful).

版本:
  • capistrano 是 3.2.1
  • capistrano-rails 是 1.1.1
  • 最佳答案

    我想我刚刚解决了它。

    我加了 with rails_env: fetch(:rails_env) do到我的 Cap 任务。

    namespace :demo do
    desc "run a demo command"
    task :foo do
    on roles(:app) do
    within release_path do
    with rails_env: fetch(:rails_env) do # ADDED
    execute 'pwd'
    execute :rake, 'grant:foo'
    end
    end
    end
    end
    end

    起初,这让我觉得很傻,因为我必须告诉 Cap 使用我已经告诉它使用的 env。

    但经过进一步思考,我似乎将部署环境与 rails 环境混淆了。在我当前的系统中,它们是一对一的(例如,Deployment-staging 部署 rails-staging,deployment-prod 部署 rails-prod),但在其他系统中可能不一定如此。

    关于rake - 为什么我的 Rake 任务不使用我在 Cap 命令中使用的环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26685729/

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