找到你所在的部署机器代码(Rails)

我的rails应用程序部署到多台计算机上。 我需要每台机器运行不同的cron作业(如果它们都运行这将是一场灾难)。 我如何告诉我的脚本当前在哪台机器上?

我正在使用随时随地的gem,我正在考虑在schedule.rb中添加条件

例:

我的deploy / production.rb

role :memcache, "123.compute-1.amazonaws.com" role :web, "456.compute-1.amazonaws.com" role :db, "789.amazonaws.com" role :misc, "789.amazonaws.com" 

我需要做什么:

 if machine is db, email report every day on db capacity if machine is xxx, do xxx... 

只是不得不做很多狩猎和实验,但我想我想出了如何实现这一目标。 为您需要crontab的每个角色/服务器创建单独的配置文件。 然后只在每个配置文件中定义所需的任务。 最后,您的deploy.rb中有类似的内容:

 namespace :deploy do desc "Update the db crontab file" task :update_db_crontab, :roles => :db do run "cd #{current_path} && whenever -fconfig/schedule_db.rb --set environment=#{rails_env} --update-crontab #{application}_db" end desc "Update the app crontab file" task :update_app_crontab, :roles => :app do run "cd #{current_path} && whenever -fconfig/schedule_app.rb --set environment=#{rails_env} --update-crontab #{application}_app" end end after "deploy:symlink", "deploy:update_db_crontab" after "deploy:symlink", "deploy:update_app_crontab" 

您可以将capistrano任务设置为仅针对特定角色运行(我假设您使用role调用中的capistrano)。

例如:

 task :db_cron_jobs, :only => :db do # Use deprec recipes to update crontab deprec2.update_user_crontab('cron_user', @daily 'send_out_emails_command') end after 'deploy:setup', 'db_cron_jobs' task :web_cron_jobs, :only => :web do # Other automated tasks end after 'deploy:setup', 'web_cron_jobs'