尝试在Staging中调用sqlite3(仅限Dev / Test)的Cron + Rake任务(rake在shell中工作)

时间:2014-08-09 16:07:59

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

在我的Rails 3.2应用程序中,我有一个自定义rake任务,我试图每天下午5点用cron作业运行。现在我在我们网站的Staging服务器上运行它。 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声明。这看起来并不优雅,但现在还可以。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

尝试按如下方式设置crontab

#crontab 

RAILS_ENV=staging

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