bin stub — отсутствуют зависимости от драгоценного камня (выполнение задач rake внутри драгоценного камня)

Я написал гем elastic-beanstalk, который будет использоваться внутри файловой структуры проекта rails. , а также в автономной среде CI, где директория и файлы rails недоступны (без распаковки и т. д.). то есть процесс сборки Bamboo, запущенный eb:package, даст один основной артефакт app.zip, где план развертывания в более позднее время и, возможно, на другом агенте может взять на себя и выполнить eb:deploy.

Цель

Все это работает нормально, когда внутри структуры проекта rails, поэтому моя цель здесь — также запустить это для автономной среды CI.

Дано

пустой каталог (среда CI) только с созданными app.zip, eb.yml, binstubs, и гем доступен

Когда

Я бегу elastic-beanstalk eb:deploy

потом

он должен запускать эквивалент rake eb:deploy, используя зависимости этого гема и файлы 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?


person kross    schedule 20.08.2013    source источник


Ответы (1)


В конечном итоге мне потребовался вызов Bundler.setup для разрешения зависимостей.

После очистки приведенный ниже файл — это единственное, что мне нужно для вызова задачи rake с bin-файлом внутри гема (внешняя заглушка 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])
person kross    schedule 21.08.2013