在我的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作业运行时,这似乎对任务没有任何影响。我已尝试按照here向export 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 :(得分:0)
你可以在crontab中设置环境变量(虽然不是在Arch或RedHat中......)
尝试按如下方式设置crontab
#crontab
RAILS_ENV=staging
0 17 * * * cd /u/apps/my_app/current && /usr/local/bin/rake my_task