Ruby Capistrano:在单独的项目中本地运行

Ruby Capistrano:在单独的项目中本地运行,ruby,capistrano,Ruby,Capistrano,我正在使用capistrano进行部署。我试图定义一项任务,该任务将: cd other-rails-app && bundle exec rake sometask 但它抱怨Rake不是捆绑包的一部分(在我试图运行此任务的项目中,这显然是不正确的)。我认为它必须在执行命令之前以某种方式改变环境,并假设bundler已经加载(这在capistrano任务中是正确的,但它是错误的文件) 如何在干净的环境下使用capistrano在本地运行命令?我解决了这个问题。运行capistr

我正在使用capistrano进行部署。我试图定义一项任务,该任务将:

cd other-rails-app && bundle exec rake sometask
但它抱怨Rake不是捆绑包的一部分(在我试图运行此任务的项目中,这显然是不正确的)。我认为它必须在执行命令之前以某种方式改变环境,并假设bundler已经加载(这在capistrano任务中是正确的,但它是错误的文件)


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

我解决了这个问题。运行capistrano时,
BUNDLE\u GEMFILE
环境变量将设置为当前项目的GEMFILE。因此,当您运行
bundle exec rake
时,Bundler首先查看环境中的GEM文件集。解决方案是“重置”此Gemfile变量。我创建了一个脚本,用于在另一个项目的根目录中运行我的rake任务

因此,不要这样做:

run_locally "cd other-rails-app && bundle exec rake mytask"
我这样做:

run_locally "cd other-rails-app && ./mytask.rb"
#!/usr/bin/env ruby

ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', File.dirname(__FILE__))
require 'bundler/setup'

%x{rake mytask}
mytask.rb
文件中,我执行以下操作:

run_locally "cd other-rails-app && ./mytask.rb"
#!/usr/bin/env ruby

ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', File.dirname(__FILE__))
require 'bundler/setup'

%x{rake mytask}