我正在使用Heroku与Cedar堆叠,并为大约30,000张不同的照片重新生成10张缩略图。
我正在启动单独的控制台进程,因此每个人都可以处理1000张照片,这样我就不会遇到超时问题(之前我遇到了麻烦)并且我可以同时生成新的缩略图(理论上可以让整个过程变得更快。)
我现在有大约12个控制台进程,每个进程都在运行Paperclip的缩略图重新生成。
似乎我添加了更多进程,其他进程开始变慢。是真的还是我想象的事情?有没有办法确保它们全速运转?
以下是heroku ps
的输出:
Process State Command
------- ---------- ---------------------------------
run.14 up for 35m bundle exec rails console
run.16 up for 31m bundle exec rails console
run.18 up for 28m bundle exec rails console
run.19 up for 27m bundle exec rails console
run.20 up for 21m bundle exec rails console
run.21 up for 20m bundle exec rails console
run.22 up for 18m bundle exec rails console
run.23 up for 8m bundle exec rails console
run.24 up for 8m bundle exec rails console
run.25 up for 6m bundle exec rails console
run.26 up for 5m bundle exec rails console
web.1 up for 3h bundle exec rails server -p $PORT
答案 0 :(得分:0)
你应该创建一个rake任务。
这是一种很好的解决方案。
在/ lib / tasks中 创建一个文件my_task.rake
namespace:image_update do
desc '....'
task :update => :environment do
User.find_in_batches(:batch_size => 100) do |user_batch|
for user in user_batch
user. ...
end
end
end
end
并使用
在控制台中启动它rake image_update:update
答案 1 :(得分:0)
单独的进程是分开的,因此Heroku方面的任何内容都不会减慢,无论你有一个进程,还是一百个进程。
但是,您的所有进程都将查看相同的数据,因此这可能是一个瓶颈。使用这种方法,您还可能会多次调整相同图像的大小,因为您不一定要检查相同的文件,而是由多个进程正确地接收。
理想情况下,您希望在工作队列中运行某种队列,但是,创建此队列的时间可能不适用于此类事件。