我有一个rails web应用程序,允许用户使用多个服务器运行自动化任务。我连接了一个rake任务,每5分钟运行一次(每当gem时)并检查需要执行的作业,并使用适当的选项启动服务器。从Rake运行厨师刀
我的麻烦是在实际运行厨师刀的命令。我目前是这样做的:
sh %{bash -c -l 'cd ~/opscode/FTW && source ~/.rvm/scripts/rvm && rvm use system && knife rackspace server list'} do |ok, res|
if ! ok
puts "meh? (status = #{res.exitstatus})"
puts res
end
end
这让我一半在那里。它切换到合适的宝石(系统),没有任何麻烦,但对刀的执行,我得到如下:
Could not find multi_json-1.1.0 in any of the sources
Run `bundle install` to install missing gems.
我没有在系统中安装宝石捆绑......所以我很困惑。我的web应用程序需要multi-json-1.1.0。我的厨师安装似乎需要multi_json 1.0.3,所以似乎在gem需求中混淆了。
从bash的命令运行没有问题......它只是在刀部分
任何想法未能抽佣?
编辑:使用mpapis建议 我使用的RVM宝石,一切都在IRB的伟大工程。我做了以下
RVM.use! 'system'
env = RVM.current
env.shell_wrapper.run_command("cd /my/path/to/opscode/FTW && knife rackspace server list")
但是,当在rails控制台或从耙子运行相同的代码我有问题。 Rails控制台基本上忽略了我的RVM.use!耙子吹起来......这是否与捆绑商干扰有关?
解决方案: mpapis构建了一个惊人的宝石https://github.com/mpapis/rvm-with,允许您在特定的ruby版本内执行代码。
RVM.with '1.8.7' do |r|
puts r.execute "unset RUBYOPT"
puts r.execute "cd /home/hunter/opscode/FTW && knife rackspace server list"
#puts r.execute "ruby --version"
end
然后我该用什么?我尝试使用%x {},系统和''来执行命令。系统给出了相同的错误,而''和%x {}是等价的,并给出: .rvm/gems/ruby-1.9.2-p290 @ global/gems/bundler-1.0.21/lib/bundler/spec_set.rb: 88:在'materialize'中:在任何源代码中找不到multi_json-1.1.0(Bundler :: GemNotFound) – 2012-03-27 03:22:42
是不是可以通过rake执行rvm?这将是相当不幸的 – 2012-03-27 20:37:21
有rvm-ruby integration => https://github.com/wayneeseguin/rvm-gem的gem,如果它缺少一些功能主义者 - 你可以分叉并添加它 - 或者打开问题以便其他人可以看看它后来 – mpapis 2012-03-27 23:26:16