【发布时间】:2018-03-14 17:00:25
【问题描述】:
我需要从现有的 ruby 脚本中触发 capistrano 部署。
例如,假设我想启动将侦听某些消息的服务,并且在某些消息上我想使用 cap staging deploy 触发另一个应用程序的 capistrano 部署(如果我直接从 shell 运行此命令,它确实有效)。
~/app-to-deploy
- Gemfile #including many dependencies
- config/deploy # capistrano files
~/my-service
- Gemfile # including different dependencies than `app-to-deploy`
- my_script.rb # that wishes to call `cap app-to-deploy deploy`
我在想我可以使用类似的东西从我的服务中运行 capistrano bash 脚本
# my_service.rb
Dir.chdir(ENV['HOME'] + '/app-to-deploy') do
result = system('bash', '-c', "cap staging deploy")
end
如果我在有或没有bundle exec 的情况下运行它,这会给出类似
cap aborted!
LoadError: cannot load such file -- active_support/all
/deploy/hermes/Capfile:2:in `require'
/deploy/hermes/Capfile:2:in `<top (required)>'
(See full trace by running task with --trace)
(我的 app-to-deploy 中有 ActiveSupport 作为 gem,但 my-service 的 Gemfile 中没有它)
好像我有一个lib依赖问题,但我不知道如何解决它......
有人有解决问题的想法或方法吗? (或者甚至更好的方法来调用 capistrano 而不使用 bash,假设我可能仍然有不同的依赖项?)
(请注意,app-to-deploy 是一个实际的 Rails 应用程序,其中包含许多我不想接触的 capistrano 脚本......)
【问题讨论】:
标签: ruby-on-rails ruby bash capistrano capistrano3