Capistrano:run_locally在单独的项目中

时间:2012-08-11 00:22:28

标签: ruby capistrano

我正在使用capistrano进行部署。我正在尝试定义一个任务:

cd other-rails-app && bundle exec rake sometask

但它抱怨Rake不属于捆绑包(在我试图运行此任务的项目中显然不是这样)。我认为在执行命令之前必须以某种方式改变环境并假设已经加载了bundler(在capistrano任务中这是正确的,但它是错误的Gemfile)。

如何使用带有干净环境的capistrano在本地运行命令?

1 个答案:

答案 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}