Ruby on rails 如何在运行不同Ruby版本的多个Rails应用程序的服务器上使用cron作业中的路径

Ruby on rails 如何在运行不同Ruby版本的多个Rails应用程序的服务器上使用cron作业中的路径,ruby-on-rails,ruby,cron,Ruby On Rails,Ruby,Cron,我有一个服务器运行两个RubyonRails应用程序,每个应用程序都在不同的Ruby版本下运行。我使用RVM作为我的Ruby版本管理器 这两个应用程序都安排了cron任务,并使用where gem生成cron配置文件,如下所示 生成cron文件时,每个应用程序都会在cron文件上写入不同的路径,以及Ruby可执行文件的特定路径 这会引起冲突吗?如果是这样,那么正确运行两个项目的cron任务的最佳方法是什么 # Begin Whenever generated tasks for: astego

我有一个服务器运行两个RubyonRails应用程序,每个应用程序都在不同的Ruby版本下运行。我使用RVM作为我的Ruby版本管理器

这两个应用程序都安排了cron任务,并使用where gem生成cron配置文件,如下所示

生成cron文件时,每个应用程序都会在cron文件上写入不同的路径,以及Ruby可执行文件的特定路径

这会引起冲突吗?如果是这样,那么正确运行两个项目的cron任务的最佳方法是什么

# Begin Whenever generated tasks for: astego at: 2020-02-20 19:09:55 +0000
PATH=/var/www/astego/shared/bundle/ruby/2.4.0/bin:/home/deploy/.rvm/gems/ruby-2.4.2/bin:/home/deploy/.rvm/gems/ruby-2.4.2@global/bin:/home/deploy/.rvm/rubies/ruby-2.4.2/bin:/home/deploy/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

50 6 * * * /bin/bash -l -c 'cd /var/www/astego/releases/20200220190804 && bundle exec bin/rails runner -e production '\''User.send_birthday_message'\'''

0 4 1 * * /bin/bash -l -c 'cd /var/www/astego/releases/20200220190804 && bundle exec bin/rails runner -e production '\''User.send_last_three_months_unpaid'\'''

# End Whenever generated tasks for: astego at: 2020-02-20 19:09:55 +0000

# Begin Whenever generated tasks for: importador_atual at: 2020-02-19 21:12:31 +0000
PATH=/var/www/importador_atual/shared/bundle/ruby/2.7.0/bin:/home/deploy/.rvm/gems/ruby-2.7.0/bin:/home/deploy/.rvm/gems/ruby-2.7.0@global/bin:/home/deploy/.rvm/rubies/ruby-2.7.0/bin:/home/deploy/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

0 23 * * * /bin/bash -l -c 'cd /var/www/importador_atual/releases/20200219211048 && bundle exec bin/rails runner -e production '\''ImportarService.importar'\'''

# End Whenever generated tasks for: importador_atual at: 2020-02-19 21:12:31 +0000

在crontab中运行的作业是一个完全独立的任务,在自己的环境中运行。可以将事物连接起来,使它们相互交谈或冲突,但一般应用程序彼此不知道

只要Rails应用程序使用单独的服务器端口并写入单独的文件,就可以了


您正在运行的实际任务不是我们通常在cron脚本中包含的任务;通常情况下,Rails是一项长期运行的任务,不会按照重复的时间表启动。运行作为Rails站点一部分的小型定时应用程序通常在crontab中使用或作为Rake任务来完成。(我推荐第一种,但大多数人似乎不知道它的存在并使用Rake。)我建议对此进行研究,并决定是否采用正确的方法
rails runner
使访问DB和所有rails模型变得非常简单,就像在普通rails环境中一样,它只是无头的,这样可以实现更轻的代码和更快的启动。

欢迎使用SO!您的问题可能适合SO,但更多的是关于通用计算站点的主题。主要用于编程问题,其次是编程工具。如果结果它关闭了,不要惊讶。我已经创造了宝石。有了它,您不必使用hosts cron,只需在Rails中进行设置即可。不要担心rvm或路径。