Использование шаблонов рендеринга и will_paginate в скрипте / консоли или в грабли - PullRequest
1 голос
/ 16 марта 2011

Я хочу предварительно сгенерировать некоторые страницы, используя задачу rake. Я хочу создавать страницы всех пользователей (800.000 и 90 пользователей на страницу, так что чуть меньше 9000 страниц). Сохраните страницу на диске.

Теперь я делаю много запросов в задаче rake к действию контроллера и получаю результаты с помощью Mechanize и сохраняю страницу на диске.

Проблема в том, что я не хочу делать так много запросов к моему серверу (потому что он истекает по тайм-ауту). Я должен построить строку HTML самостоятельно.

В представлении я использую помощника will_paginate для нумерации страниц. Я действительно не знаю, как построить нумерацию страниц в граблях. will_paginate использует такие вещи, как переменная response.

Может ли кто-нибудь помочь мне выполнить нумерацию страниц без использования запроса? Или может быть другой драгоценный камень, чтобы сделать нумерацию страниц ... Это не должно выглядеть красиво

Я использую Rails 2.1

Спасибо

1 Ответ

2 голосов
/ 16 марта 2011

Я нашел это через другой вопрос SO, желающий предварительно загрузить их кеш. https://github.com/tommyh/preheat

Preheat.it do
  app.get("/")
end

Так что в вашем случае вы можете использовать задание cron для предварительного нагрева кеша. что-то вроде

total_user_pages = 9000 #calculate it
Preheat.it do
  1.upto(total_user_pages) do |i| 
    app.get("/users?page=#{i}") 
  end
end

Я проверил, и Rails.cache был представлен в 2.1, так что у вас все хорошо. Этот драгоценный камень, в отличие от механизации, не будет называть ваш веб-сервер

"Метод извлечения ActiveSupport в настоящее время модифицируется только в процессе ruby который использует Preheat, так что-то как бы Mechanize / Wget / Curl будет вызывать страница через ваш интерфейс и не будут затронуты Preheat.it, в то время как app.get будет прямо позвоните своему контролеру в этом тот же рубиновый процесс. "

Затем вам нужно будет использовать Rails.cache в вашем приложении, чтобы воспользоваться.

...