gpt4 book ai didi

ruby-on-rails-4 - 使用Bundle作用域外的Rake执行系统命令

转载 作者:行者123 更新时间:2023-12-04 03:01:00 25 4
gpt4 key购买 nike

假设我有此Rake任务:

namespace :db do
namespace :dump do.
desc 'Backup database dump to s3'
task :backup => :environment do
cmd = ['backup', 'perform', '-t project_backup', "-c #{Rails.root.join 'lib', 'backup', 'config.rb'}"]
system(*cmd) # ...I've tried `` & exec() sa well, same thing
end
end
end

备份gem是独立的ruby gem应用程序,需要将依赖项与应用程序 bundle 程序隔离。换句话说,它不能成为 Gemfile的一部分。这个gem只需安装在 gem install backup

当我通过bash控制台运行 backup命令时,它成功运行:
$ backup perform -t validations_backup -c /home/equivalent/my_project/lib/backup/config.rb

当我执行 rake db:dump:backup时,我会得到
backup is not part of the bundle. Add it to Gemfile. (Gem::LoadError)

...当我从bash使用 bundle exec运行备份命令时,这是同一件事
$ bundle exec backup perform -t validations_backup -c /home/equivalent/my_project/lib/backup/config.rb

...表示当作为rake任务的一部分运行时, backup命令在 bundle 程序上执行。

我的问题:我如何在 bundle 程序范围外运行 rake db:dump:backup,这意味着 backup命令将不会在 bundle 程序上执行?

谢谢

最佳答案

我找到了解决此问题的方法here:

namespace :db do
namespace :dump do
desc 'Backup database dump to s3'
task :backup do
Bundler.with_clean_env do
sh "backup perform -t project_backup -c #{Rails.root.join 'lib', 'backup', 'config.rb'}"
end
end
end
end

这里的关键是将不能在 bundle 程序环境下运行的代码封装在这样的块中:

Bundler.with_clean_env do
# Code that needs to run without the bundler environment loaded
end

关于ruby-on-rails-4 - 使用Bundle作用域外的Rake执行系统命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24284347/

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