我编写了一个 gem elastic-beanstalk,它可以在 Rails 项目文件结构中使用,也可以在 Rails 目录和文件不可用(没有解压缩等)的独立 CI 环境中使用。即,运行的 Bamboo 构建过程eb:package
将产生一个主要工件app.zip
,稍后部署计划可能会在另一个代理上接管和执行eb:deploy
。
目标
在 Rails 项目结构中,这一切都运行良好,所以我的目标是在独立 CI 环境中也能运行。
给定
一个空的目录(CI 环境),只创建了app.zip
, eb.yml
, binstubs,并且 gem 可用
什么时候
我跑elastic-beanstalk eb:deploy
然后
它应该运行相当于rake eb:deploy
使用此 gem 的依赖项和 lib 文件。
更新 - Bin Stub
看来 bin 存根可能是我正在寻找的东西。探索另一个 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 是要走的路: