我们使用 Amazon 的 SNS 来通知我们的应用程序对我们的自动缩放组的更改。如果服务器终止,我们要删除节点。
通知工作正常,自动缩放组也是如此。我唯一的问题是我无法从我的 Rails 应用程序中运行刀命令,我猜是因为它调用了错误的 Ruby 版本并试图使用应用程序的 gems。我们使用的是 RVM 安装的 ruby-2.0.0-p195,我不想捆绑 Chef。
因此,当我尝试执行刀时,错误是:
system "cd /chefroot/ && /usr/bin/knife"
/Users/SM/.rvm/gems/ruby-2.0.0-p195@global/gems/bundler-1.3.5/lib/bundler/rubygems_integration.rb:214:in `block in replace_gem': chef is not part of the bundle. Add it to Gemfile. (Gem::LoadError)
我可以看到刀的召唤厨师,但需要作为系统宝石这样做。在刀.rb 中:
load Gem.bin_path('chef', 'knife', version)
也看过这个 SO 帖子,但我不想使用rvm-with gem。
我转而查看了 Opscode API,但这并不适合我们。有没有更好、更复杂的方法来做到这一点?