在Sinatra中运行后台任务以避免Heroku 30秒超时的解决方案是使用异步任务队列。异步任务队列是一种将后台任务从主应用程序中分离出来并在后台运行的方法,以避免超时限制。
以下是一种实现该解决方案的方法:
gem 'sidekiq'
然后运行bundle install
来安装依赖项。
MyBackgroundJob
的类,并包含一个perform
方法,该方法将执行你的后台任务。例如:class MyBackgroundJob
include Sidekiq::Worker
def perform
# 在这里编写你的后台任务逻辑
end
end
require 'sidekiq'
Sidekiq.configure_client do |config|
config.redis = { url: ENV['REDIS_URL'], size: 1 }
end
确保你的应用程序中有一个可用的Redis实例,并将其URL存储在名为REDIS_URL
的环境变量中。
perform_async
方法来触发后台任务的执行。例如:post '/run_background_task' do
MyBackgroundJob.perform_async
"后台任务已触发"
end
bundle exec sidekiq -r ./app.rb
确保你的应用程序文件(例如app.rb
)的路径正确。
现在,当你的应用程序接收到/run_background_task
路由的POST请求时,它将触发MyBackgroundJob
后台任务的执行,而不会受到Heroku的30秒超时限制。
请注意,这只是一种解决方案,你还可以使用其他异步任务队列库,如Resque或Delayed Job,根据你的需求选择适合的工具。此外,你还可以根据具体的后台任务需求进行更多的配置和优化。
领取专属 10元无门槛券
手把手带您无忧上云