从gem根文件夹安装gem后运行命令

时间:2014-10-14 17:27:48

标签: ruby deployment gem chef

我正在部署Sinatra应用程序作为宝石。我有一个命令,可以将应用程序作为服务启动。 我们正在使用厨师来管理我们的部署。

如何运行命令以启动应用服务,但仅在完全安装后(包括运行时依赖项)?

我尝试使用谷歌搜索来尝试运行安装后的脚本,但我没有找到任何有用或具体的东西,没有一些复杂的'extconf.rb'工作

如果我能提供帮助,我宁愿不使用执行资源。

编辑:我尝试了所建议的内容,但它打破了导致berkshelf无法在我们的管道中工作的方式。

这是我正在使用的代码:

execute "run-service:post_install" do
    cwd  (f = File.expand_path(__FILE__).split('/')).shift(f.length - 3).join('\\')
    timeout 5
    command "bundle && rake service:post_install"
    # action :nothing
    # subscribes :run, "gem_package[gem_name]" , :delayed
end

如果我取消评论或不是最后两行并不重要,它只是打破了一些事情,但如果我拿出整件事就会停止破坏事情。显然我做错了,但我不确定是什么。

编辑: IT是命令本身打破它,当我将命令更改为lsaction更改为:run时,它会中断。

编辑:在改变命令路径后,我设法让它吐出一个可用的错误,它试图从厨师烹饪书籍路径运行命令,所以我(希望)强迫它使用正确的道路。

2 个答案:

答案 0 :(得分:1)

为什么不想使用执行资源?这正是它的用途,从Chef运行命令。 Chef遵守资源的顺序,因此,如果您有gem_package后跟execute,那么它们将按此顺序运行。

答案 1 :(得分:0)

所以,最后我决定尝试使用服务资源,因为它允许你设置启动和停止命令。

我使用的代码是:

service service_name do
  init_command ("#{%x(gem env gemdir).strip.gsub('/','\\')}\\gems\\gem_name-#{installing_version}")
  start_command "rake service:start"
  stop_command "rake service:stop"
  reload_command "rake service:reload"
  restart_command "rake service:restart"
  supports start: true, restart: true, reload: true
  action [:enable,:start]
end 

我仍然遇到问题,但这种情况有所不同。