我正在使用以下内容使用memcached来缓存加载缓慢的页面:

caches_action :complex_report, :expires_in => 1.day


控制器动作受Devise身份验证保护。

当前,页面在用户第一次请求时被缓存。然后从缓存中提取当天的后续请求。

这样做的问题是,初始请求需要20到30秒的加载时间。是否可以通过计划任务预先填充缓存?

任何建议,不胜感激。

最佳答案

这是对以前基于cron的解决方案的扩展,该解决方案使用curl的功能来存储cookie,以便您可以在一个步骤中进行身份验证,然后在下一步中再次将cookie用作经过身份验证的用户。因此,如果将这些行放在名为“ prepare_cache.sh”的脚本中

rm /tmp/cookiejar
curl --request POST -d "login=<username>" -d "password=<password>" -c /tmp/cookiejar http://yourwebpages.url/login
curl --request GET -b -c /tmp/cookiejar http://yourwebpages.url/page_to_cache
rm /tmp/cookiejar


将登录名和密码参数替换为与登录表单中使用的变量以及要调用的网址匹配的参数。我要先删除cookiejar,以确保那里没有文件,然后最后将其删除,以确保没有cookie随其访问级别而浮动。

然后,您可以使用cron作业调用此脚本:

*/15 * * * * /home/myname/prepare_cache.sh > /dev/null 2>&1


希望这应该工作。尝试时似乎为我工作。

08-19 01:08