0

展開には capistrano を使用しています。次のタスクを定義しようとしています。

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

しかし、Rake がバンドルの一部ではないことについて不平を言っています (これは、このタスクを実行しようとしているプロジェクトでは明らかに真実ではありません)。コマンドを実行する前に何らかの方法で環境を変更し、バンドラーが既に読み込まれていると仮定する必要があると思います (これは capistrano タスクでは当てはまりますが、Gemfile が間違っています)。

クリーンな環境で capistrano を使用してローカルでコマンドを実行するにはどうすればよいですか?

4

1 に答える 1

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}
于 2012-08-13T15:25:58.427 に答える