【问题标题】:Cron + Rake task trying to invoke sqlite3 (only Dev/Test) in Staging (rake works from shell)Cron + Rake 任务试图在 Staging 中调用 sqlite3(仅开发/测试)(rake 从 shell 工作)
【发布时间】:2014-10-02 22:26:30
【问题描述】:

在我的 Rails 3.2 应用程序中,我有一个自定义 rake 任务,我每天下午 5 点尝试使用 cron 作业运行该任务。现在我正在我们网站的登台服务器上运行它。 cron 作业设置正确,但根据 cron 守护程序的电子邮件输出,rake 正在中止,因为它正在尝试调用 sqlite3。

这是我的 cron 工作:

#crontab
0 17 * * * cd /u/apps/my_app/current && /usr/local/bin/rake my_task

我已预留 sqlite3 用于开发和测试,如下所示:

#Gemfile
group :development, :test do
  gem 'factory_girl_rails'                
  gem 'letter_opener'                      
  gem 'rspec-rails'            
  gem 'sqlite3'                             
  gem 'thin'
  gem 'pry-rails'                              
end

我还设置了我的 rake 任务以加载正确的环境,如下所示:

#mytask.rake
task :my_task => :environment do
    # my task
end

这是我从 crond 收到的电子邮件中的错误:

rake aborted!
Please install the sqlite3 adapter: `gem install activerecord-sqlite3-adapter` (sqlite3 is not part of the bundle. Add it to Gemfile.)

如果我直接从 shell 运行 rake 任务,我不会收到错误消息。这似乎是因为~/.bashrc 中的以下行:

alias rake='RAILS_ENV=staging rake'

但是,当从 cron 作业运行时,这似乎对任务没有任何影响。我尝试按照推荐的hereexport RAILS_ENV=staging 添加到.bashrc 文件,但没有帮助。

我发现的一件事是这样编写 cron 作业:

#crontab 
0 17 * * * cd /u/apps/my_app/current && /usr/local/bin/rake my_task RAILS_ENV=staging

...直接在 cron 命令中使用 env 声明。这看起来不是很优雅,但现在还可以。有没有更好的方法来解决这个问题?

【问题讨论】:

  • 0 17 * * * cd /u/apps/my_app/current && export RAILS_ENV=stage /usr/local/bin/rake my_task 怎么样?
  • 我目前的解决方案是一样的,只是在cron作业的第二个命令末尾添加了env声明。我希望找到一种方法来设置它,所以我不需要为每个 cron 作业任务声明它。
  • sqlite3 在 Gemfile 的暂存部分是否可用?如果你运行RAILS_ENV=staging rake my_task 会成功吗? (我想不是)。另外,您确定您的 SQLite 仅限于开发和测试吗?您是否为此设置了配置文件?
  • @xlembouras 如果我直接从 shell 运行 rake 任务,我不会收到错误消息。在crontab -e 的 rake 任务中添加“RAILS_ENV=staging”也可以解决问题,但我正在寻找一种不必在每个 cron 作业中声明的方法。

标签: ruby-on-rails shell cron rake environment


【解决方案1】:

你可以在 crontab 中设置环境变量(虽然不是在 Arch 或 RedHat 中......)

尝试如下设置你的 crontab

#crontab 

RAILS_ENV=staging

0 17 * * * cd /u/apps/my_app/current && /usr/local/bin/rake my_task

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多