我正在部署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是命令本身打破它,当我将命令更改为ls
而action
更改为:run
时,它会中断。
答案 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
我仍然遇到问题,但这种情况有所不同。