Оказывается, что EF Core 2.1 не поддерживает значение PK равное 0.
К сожалению, любые начальные данные, пытающиеся использовать значение 0 для PK, должны будут выполнить миграцию с пользовательским SQL, чтобы вставить свои записи PK 0.
см .: https://github.com/aspnet/EntityFrameworkCore/issues/12399
.
Вы обязательно должны проверить следующие Railscasts:
Они объясняют, как всячески запускать фоновые процессы в Rails (с помощью или без очереди ...)
Я только что экспериментировал с гемом 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
Мне нравится использовать backgroundrb, приятно, что он позволяет вам общаться с ним во время длительных процессов. Таким образом, вы можете иметь обновления статуса в вашем приложении rails
Как насчет:
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, имея возможность доступа к базе данных.
в идеале вы хотите использовать существующий сервер фоновых заданий, а не писать свой собственный. они обычно позволяют отправить задание и присвоить ему уникальный ключ; затем вы можете использовать этот ключ для периодических запросов на сервер вакансий о статусе вашей работы, не блокируя свое веб-приложение. вот хороший обзор различных вариантов.
Запустить отдельный процесс, что, вероятно, легче всего сделать с помощью системы
, добавив перед ним «nohup» и добавив «&» в конец переданной команды . (Убедитесь, что команда представляет собой только один строковый аргумент, а не список аргументов.)
Есть несколько причин, по которым вы хотите сделать это таким образом, а не, скажем, пытаться использовать потоки:
Потоки Ruby могут быть немного сложно, когда дело касается ввода-вывода; вы должны позаботиться о том, чтобы некоторые ваши действия не вызывали блокировку всего процесса.
Если вы запускаете программу с другим именем, ее легко идентифицировать в 'ps', поэтому вы случайно не подумаете, что это Back-end FastCGI взбесился или что-то в этом роде, и убейте его.
На самом деле, процесс, который вы запускаете, должен быть «деамонизирован»,
Я думаю порождение - отличный способ разветвить ваш процесс, выполнить некоторую обработку в фоновом режиме и показать пользователю лишь некоторое подтверждение того, что эта обработка была запущена.