Ruby on Rails: Как выполнить вещи в фоновом режиме?

Оказывается, что EF Core 2.1 не поддерживает значение PK равное 0.

К сожалению, любые начальные данные, пытающиеся использовать значение 0 для PK, должны будут выполнить миграцию с пользовательским SQL, чтобы вставить свои записи PK 0.

см .: https://github.com/aspnet/EntityFrameworkCore/issues/12399

.

30
задан Stefan 6 July 2010 в 14:04
поделиться

7 ответов

Вы обязательно должны проверить следующие Railscasts:

Они объясняют, как всячески запускать фоновые процессы в Rails (с помощью или без очереди ...)

40
ответ дан AnkitG 27 November 2019 в 23:47
поделиться

Я только что экспериментировал с гемом delayed_job, потому что он работает с хостинговой платформой Heroku, и его было невероятно легко установить !!

Добавьте gem в Gemfile, bundle install, rails g delayed_job, rake db:migrate Затем запустите обработчик очереди с помощью;

RAILS_ENV=production script/delayed_job start

Если у вас есть вызов метода, который является вашим длительным процессом, т. Е.

company.send_mail_to_all_users

вы меняете его на:

company.delay.send_mail_to_all_users

Проверьте полные документы на github : https://github.com/collectiveidea/delayed_job

7
ответ дан nickgrim 27 November 2019 в 23:47
поделиться

Мне нравится использовать backgroundrb, приятно, что он позволяет вам общаться с ним во время длительных процессов. Таким образом, вы можете иметь обновления статуса в вашем приложении rails

1
ответ дан Matthew Campbell 27 November 2019 в 23:47
поделиться

Как насчет:

def background_check
   exec("script/runner check_for_record_in_www.rb #{self.username}") if fork == nil
end

Программа «check_for_record_in_www.rb» будет запущена в другом процессе и получит доступ к ActiveRecord, имея возможность доступа к базе данных.

0
ответ дан Edu 27 November 2019 в 23:47
поделиться

в идеале вы хотите использовать существующий сервер фоновых заданий, а не писать свой собственный. они обычно позволяют отправить задание и присвоить ему уникальный ключ; затем вы можете использовать этот ключ для периодических запросов на сервер вакансий о статусе вашей работы, не блокируя свое веб-приложение. вот хороший обзор различных вариантов.

2
ответ дан 27 November 2019 в 23:47
поделиться

Запустить отдельный процесс, что, вероятно, легче всего сделать с помощью системы , добавив перед ним «nohup» и добавив «&» в конец переданной команды . (Убедитесь, что команда представляет собой только один строковый аргумент, а не список аргументов.)

Есть несколько причин, по которым вы хотите сделать это таким образом, а не, скажем, пытаться использовать потоки:

  1. Потоки Ruby могут быть немного сложно, когда дело касается ввода-вывода; вы должны позаботиться о том, чтобы некоторые ваши действия не вызывали блокировку всего процесса.

  2. Если вы запускаете программу с другим именем, ее легко идентифицировать в 'ps', поэтому вы случайно не подумаете, что это Back-end FastCGI взбесился или что-то в этом роде, и убейте его.

На самом деле, процесс, который вы запускаете, должен быть «деамонизирован»,

7
ответ дан 27 November 2019 в 23:47
поделиться

Я думаю порождение - отличный способ разветвить ваш процесс, выполнить некоторую обработку в фоновом режиме и показать пользователю лишь некоторое подтверждение того, что эта обработка была запущена.

1
ответ дан 27 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: