有沒有人有使用aws opsworks上的每當寶石的經驗/成功?有一個好的食譜?我可以將該配方放在單獨的圖層上並將一個實例與該附加圖層關聯嗎?還是有更好的方法來做到這一點?謝謝!!!每當aws opsworks上的寶石
編輯:
我們最終做不同的有點......
代碼:
真的不能發佈真正的代碼,但它是這樣的:在
deploy/before_migrate.rb:
[:schedule].each do |config_name|
Chef::Log.info("Processing config for #{config_name}")
begin
template "#{release_path}/config/#{config_name}.rb" do |_config_file|
variables(
config_name => node[:deploy][:APP_NAME][:config_files][config_name]
)
local true
source "#{release_path}/config/#{config_name}.rb.erb"
end
rescue => e
Chef::Log.error e
raise "Error processing config for #{config_name}: #{e}"
end
end
in deploy/after_restart.rb:
execute 'start whenever' do
cwd release_path
user node[:deploy][:APP_NAME][:user] || 'deploy'
command 'bundle exec whenever -i APP_NAME'
end
在配置/ schedule.rb.erb:
<% schedule = @schedule || {} %>
set :job_template, "bash -l -c 'export PATH=/usr/local/bin:${PATH} && :job'"
job_type :runner, 'cd :path && bundle exec rails runner -e :environment ":task" :output'
job_type :five_runner, 'cd :path && timeout 300 bundle exec rails runner -e :environment ":task" :output'
set :output, 'log/five_minute_job.log'
every 5.minutes, at: <%= schedule[:five_minute_job_minute] || 0 %> do
five_runner 'Model.method'
end
最後我們處理這個如下: 添加值在堆棧json中指定每當cron運行哪個主機,並且默認爲rails_app1 在只在該主機上運行的rails項目中有一個部署掛鉤。 這將cron放在第一臺主機或我們指定的任何一個上,並且很容易配置和管理。 我們還有一個erb文件,它被計算爲schedule.rb,以便我們可以設置各種參數,例如每天運行的時間或每小時運行一分鐘的時間。這個erb文件也在部署鉤子中進行評估。 – nroose
如果可能,請你分享一下代碼嗎? – jwako
是的請選擇,一些更詳細的建議會很棒。 –