在我的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作业运行时,这似乎不会对任务产生任何影响。我尝试将export RAILS_ENV=staging作为推荐的here添加到.bashrc文件中,但没有帮助。
我发现有一件事是可行的,就是像这样编写cron作业:
#crontab
0 17 * * * cd /u/apps/my_app/current && /usr/local/bin/rake my_task RAILS_ENV=staging在...with命令中直接执行环境声明。这看起来不是很优雅,但现在还可以。有没有更好的方法来解决这个问题呢?
发布于 2014-08-13 00:09:53
crontab您可以在Υ中设置环境变量(虽然不是在Arch或RedHat中...)
尝试按如下方式设置crontab
#crontab
RAILS_ENV=staging
0 17 * * * cd /u/apps/my_app/current && /usr/local/bin/rake my_taskhttps://stackoverflow.com/questions/25220467
复制相似问题