2012-08-11 38 views
0

我正在使用capistrano進行部署。我試圖定義一個任務,它:Capistrano:單獨項目中的run_locally

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

但它抱怨束耙不是部分(這顯然是在我試圖運行此任務的項目真)。我認爲它必須在執行命令之前以某種方式改變環境,並假設bundler已經被加載(這在capistrano任務中是正確的,但是它是錯誤的Gemfile)。

如何在潔淨的環境下在本地運行帶有capistrano的命令?

回答

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} 
相關問題