我正在使用capistrano进行部署。我正在尝试定义一个任务:
cd other-rails-app && bundle exec rake sometask
但它抱怨Rake不属于捆绑包(在我试图运行此任务的项目中显然不是这样)。我认为在执行命令之前必须以某种方式改变环境并假设已经加载了bundler(在capistrano任务中这是正确的,但它是错误的Gemfile)。
如何使用带有干净环境的capistrano在本地运行命令?
答案 0 :(得分:0)
我弄明白了这个问题。运行capistrano时,BUNDLE_GEMFILE
环境变量将设置为当前项目的Gemfile。因此,当您运行bundle exec rake
时,Bundler首先查看环境中设置的Gemfile。解决方案是“重置”此Gemfile变量。我创建了一个脚本,用于在我的其他项目的根目录中运行我的rake任务。
所以不要这样做:
run_locally "cd other-rails-app && bundle exec rake mytask"
我这样做:
run_locally "cd other-rails-app && ./mytask.rb"
在mytask.rb
文件中,我这样做:
#!/usr/bin/env ruby
ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', File.dirname(__FILE__))
require 'bundler/setup'
%x{rake mytask}