Я решил это, поставив следующее на моей странице login.php.
<script type="text/javascript">
if (top.location.href.indexOf('login.php') == -1) {
top.location.href = '/login.php';
}
</script>
плагин Workling позволяет Вам планировать фоновые задачи в очереди (они выполнили бы долгую задачу). С версии 0.3 можно попросить у рабочего ее состояния, это позволило бы Вам отображать некоторые изящные индикаторы выполнения.
Другая замечательная функция с Workling - то, что асинхронный бэкенд может быть переключен: Вы можете, использовал DelayedJobs, Икра (классическое ветвление), Скворец...
У меня есть сайт очень большого объема, который генерирует много больших файлов CSV. Они иногда занимают несколько минут для завершения. Я делаю следующее:
Это может быть слишком мощно, если Вы просто планируете иметь одно или два выполнения за один раз, но если Вы хотите масштабироваться... :)
вызов./script/runner в фоновом режиме работал лучше всего на меня. (Я также делал поколение PDF.) Это походит на наименьший общий знаменатель, также будучи самым простым для реализации. Вот рецензия моего опыта .
Простое решение, которое не требует никаких дополнительных Драгоценных камней или плагинов, состояло бы в том, чтобы создать пользовательскую задачу Граблей для обработки поколения PDF. Вы могли смоделировать процесс поколения PDF как конечный автомат с состояниями такой, поскольку отправил , обработка и завершенный , которые хранятся в таблице базы данных модели. Первоначальный Запрос HTTP к приложению направляющих просто добавил бы, что запись на таблицу с отправила состояние и возврат.
было бы задание крона, которое выполняет Вашу пользовательскую задачу Граблей как отдельный процесс Ruby, таким образом, основное приложение направляющих незатронуто. Задача Граблей может использовать ActiveRecord для нахождения всех моделей, которые имеют , отправил состояние, измените состояние на обработка и затем генерируйте связанный PDFs. Наконец, это должно установить состояние на завершенный . Это позволяет Вашим вызовам Ajax в рамках приложения для направляющих контролировать состояние процесса поколения PDF.
при помещении задачи Граблей в [1 113] your_rails_app/lib/tasks затем, это имеет доступ к моделям в рамках приложения направляющих. Скелет такого pdf_generator.rake был бы похож на это:
namespace :pdfgenerator do
desc 'Generates PDFs etc.'
task :run => :environment do
# Code goes here...
end
end
, Как отмечено в Wiki, существует несколько оборотных сторон к этому подходу. Вы будете использовать крон для регулярного создания справедливо, для процесса тяжеловеса Ruby и синхронизации заданий крона была бы нужна тщательная настройка, чтобы гарантировать, что у каждого есть достаточное количество времени для завершения, прежде чем следующий придет. Однако подход прост и должен удовлетворить Ваши потребности.
я использую Windows Vista 64 бита для моей машины разработки; однако, моя производственная машина является Ubuntu 8.04 LTS. Я должен рассмотреть переключение на Linux для моей машины разработки? Будут решения представили работу над обоими?
Вы рассмотрели под управлением Linux в VM сверху Vista?
Это действительно походит на что-то, что у Вас должно быть выполнение фонового процесса, а не экземпляр приложения (пассажир/полукровка, какой бы ни Вы используете) как тот способ, которым Ваше приложение может остаться делающим, что это, как предполагается, делает, служа запросам, в то время как фоновая задача некоторого вида, Workling хорош, обрабатывает перемалывание чисел. Я знаю, что это не занимается проблемой прогресса, но если не абсолютно необходимо, чтобы я думал, что это - маленькая цена для оплаты.
Вы могли сделать, чтобы пользователь нажал требуемое действие, имел то действие, передают запрос очереди Workling и имеют его, отправляют некоторое уведомление пользователю, когда это завершается, возможно, электронное письмо или что-то. Я не уверен в практичности этого, просто думая вслух, но моя точка - то, что она действительно походит, который должен быть фоновой задачей некоторого вида.
Я использую Фоновое задание ( http://codeforpeople.rubyforge.org/svn/bj/trunk/README ) для планирования задач. Я создаю небольшой сайт администрирования, который позволяет администраторам сайта выполнять все виды вещей Вы, и я работал бы из командной строки от хорошего веб-интерфейса.
Существует совершенно новое Growl4Rails..., который является для этого определенного варианта использования (среди других также).
http://www.writebetterbits.com/2009/01/update-to-growl4rails.html
Я знаю, что Вы сказали, что не волновались по поводу стороны клиента, но я думал, что Вы могли бы найти это интересным: Growl4Rails - уведомления о стиле Рычания, которые были разработаны для в значительной степени, что Вы делаете оценку по примеру, что они используют.
Я использовал икра прежде и определенно рекомендовал бы это.
Невероятно простой настроить (который не много других решений), и работает хорошо.
Выезд BackgrounDRb, это разработано для точно сценария, который Вы описываете.
я думаю, что это было вокруг некоторое время и довольно зрело. Можно контролировать состояние рабочих.
Это - довольно хорошая идея разработать на той же платформе разработки как Ваша продуктивная среда, особенно при работе с направляющими. Предложение для выполнения Linux в VM является хорошим. Выезд Sun xVM для программного обеспечения виртуализации С открытым исходным кодом.