2

Rails プロジェクト ファイル構造内で使用されるgem elastic-beanstalkを作成しました。また、Rails dir とファイルが使用できないスタンドアロン CI 環境でも使用できます (解凍などは必要ありません)。つまり、Bamboo ビルド プロセスの実行eb:packageによって 1 つのプライマリ アーティファクトが生成app.zipされ、後でデプロイ プランが、おそらく別のエージェントで引き継がれて実行される可能性がありeb:deployます。

目標

これは、Rails プロジェクト構造内ではすべて正常に実行されるため、ここでの私の目標は、これをスタンドアロン CI 環境でも実行することです。

与えられた

app.zip, eb.yml, binstubsだけが作成された空のディレクトリ (CI 環境) で、gem が利用可能です

いつ

走るelastic-beanstalk eb:deploy

それで

rake eb:deployこれは、この gem の依存関係と lib ファイルを使用するのと同じように実行する必要があります。

更新 - ビン スタブ

ビンスタブが私が探しているものかもしれません。別のSO投稿を調べて、私は試しました(これまでのところ役に立ちませんでした)bin/elastic-beanstalk

gem_dir = File.expand_path('..',File.dirname(__FILE__))
$LOAD_PATH.unshift gem_dir# Look in gem directory for resources first.

lib = File.expand_path('lib', gem_dir)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)

require 'elastic/beanstalk'
require 'rake'
require 'pp'

pwd=Dir.pwd
Dir.chdir("#{gem_dir}/bin") # We'll load rakefile from the gem's bin dir.
Rake.application.init
Rake.application.load_rakefile
Dir.chdir(pwd) # Revert to original pwd for any path args passed to task.

Rake.application.invoke_task(ARGV[0])

したがって、これは実行されますが、私が始めたのと同じ依存関係の問題でまだ失敗していundefined method 'safe_load_file' for Psych:Module (NoMethodError)ます。私はbinstubが行く方法だと思いますが:

bin スタブの依存関係の問題を解決するにはどうすればよいですか?

4

1 に答える 1

3

Bundler.setup最終的に、依存関係を解決するために を呼び出す必要がありました。

クリーンアップ後、gem 内の bin ファイルを使用して rake タスクを呼び出す必要があるのは、以下のファイルだけです (外部 bin スタブはこのファイルを使用します)。

ビン/弾性豆の木

#!/usr/bin/env ruby
require 'rake'
require 'bundler'

raise "Bundler is required.  Please install bundler with 'gem install bundler'" unless defined?(Bundler)

#
# Example:
#
#   elastic-beanstalk eb:show_config
#   elastic-beanstalk eb:show_config[1.1.1]
#

# init dependencies
Bundler.setup

# init rake
Rake.application.init

# load the rake tasks
gem_dir = File.expand_path('..',File.dirname(__FILE__))
load "#{gem_dir}/lib/elastic/beanstalk/tasks/eb.rake"

# invoke the given task
Rake.application.invoke_task(ARGV[0])
于 2013-08-21T15:44:48.987 に答える