每当宝石上的aws opsworks

时间:2014-01-13 20:59:09

标签: ruby-on-rails amazon-web-services whenever aws-opsworks

有没有人在aws opsworks上使用when gem时有经验/成功?有一个很好的食谱吗?我可以将该配方放在单独的图层上并将一个实例与该附加图层相关联吗?或者有更好的方法吗?感谢!!!

编辑:

我们最后做的有点不同......

代码:

无法真正发布真实代码,但就像这样:

在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

在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

在config / 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

1 个答案:

答案 0 :(得分:7)

我们的回购中有一本随时可以使用的食谱,欢迎您在这里使用:https://github.com/freerunningtech/frt-opsworks-cookbooks。我假设您熟悉将自定义cookbook添加到opsworks堆栈中。

我们通常在自己的层上运行它,该层还包括应用程序部署所需的rails cookbook(而不是应用服务器):

  • 配置:rails :: configure
  • 部署:deploy :: rails
  • 取消部署:deploy :: rails-undeploy

但是,我们通常也会将此实例部署为应用程序服务器,这意味着我们最终还会从我们正在使用的框中提供请求。

有一个“问题”,因为你必须在schedule.rb顶部的env中设置你的路径,如下所示:

env :PATH, ENV['PATH']