@@ -23,18 +23,21 @@ def perform
2323 logger . info "Updating remote RubyGems..."
2424
2525 inserts = [ ]
26- changed_gems = Library . gem . all . map { |lib | [ lib . name , lib ] } . to_h
27- removed_gems = changed_gems . keys
26+ # Use pluck + index to reduce memory usage instead of loading full AR objects
27+ changed_gems = Library . gem . pluck ( :name , :id , :versions ) . each_with_object ( { } ) do |( name , id , versions ) , hash |
28+ hash [ name ] = { id : id , versions : versions }
29+ end
30+ removed_gems = changed_gems . keys . to_set
2831
2932 fetch_remote_gems . each do |name , versions |
3033 versions = pick_best_versions ( versions )
31- lib = changed_gems [ name ]
34+ lib_data = changed_gems [ name ]
3235
33- if lib
36+ if lib_data
3437 removed_gems . delete ( name )
3538
36- if lib . versions != versions
37- lib . update ( versions : versions )
39+ if lib_data [ : versions] != versions
40+ Library . where ( id : lib_data [ :id ] ) . update_all ( versions : versions )
3841 else
3942 changed_gems . delete ( name )
4043 end
@@ -53,8 +56,8 @@ def perform
5356 end
5457
5558 if removed_gems . size > 0
56- Library . delete_by ( name : removed_gems )
57- logger . info "Removed #{ removed_gems . size } gems: #{ removed_gems . join ( ', ' ) } "
59+ Library . where ( source : :remote_gem , name : removed_gems . to_a ) . delete_all
60+ logger . info "Removed #{ removed_gems . size } gems: #{ removed_gems . to_a . join ( ', ' ) } "
5861 end
5962 ensure
6063 self . class . clear_lock_file if @can_clear_lock_file
@@ -96,8 +99,9 @@ def flush_cache(gem_names)
9699 end
97100 CacheClearJob . perform_later ( "/gems" , "/featured" , *index_map . keys . map { |k | "/gems/~#{ k } " } )
98101
99- gem_names . each_slice ( 50 ) do |list |
100- CacheClearJob . perform_later ( *list . map { |k | [ "/gems/#{ k } /" , "/list/gems/#{ k } /" , "/static/gems/#{ k } " ] } . flatten )
102+ # Batch into larger chunks to reduce job overhead
103+ gem_names . each_slice ( 100 ) do |list |
104+ CacheClearJob . perform_later ( *list . flat_map { |k | [ "/gems/#{ k } /" , "/list/gems/#{ k } /" , "/static/gems/#{ k } " ] } )
101105 end
102106 end
103107end
0 commit comments