2016-04-27 6 views
0

Ich versuche herauszufinden, wie man einen bestimmten Edelstein nur bei Bedarf lädt. Hier das Szenario:Autoload ein Juwel nur bei Bedarf in Schienen 3.2?

Ich benutze die große axlsx Edelstein, um Excel-Dateien zu erstellen. Das Feature in meiner app dies ermöglicht wird nur aufgerufen, wenn der Benutzer eine Datei Excel fragen:

# model 
require 'axlsx' 
class AssessmentRaw < ActiveRecord::Base 
    # fun stuff here 
    def create_excel_file_io 
     xls = Axlsx::Package.new 
     # fun stuff here too 
    end 
end 

# a call in a controller 
@assessment_raw_instance.create_excel_file_io 

Mit derailed Juwel kann ich sehen, dass axlsx schwer auf Speicher ist:

axlsx: 9.8516 MiB (Also required by: /path-to-rails/app/models/assessment_raw) 
    axlsx/workbook/workbook.rb: 3.5391 MiB 
    axlsx/workbook/worksheet/worksheet.rb: 0.3477 MiB 
    axlsx/drawing/drawing.rb: 1.8438 MiB 
    zip: 1.6797 MiB 
    zip/entry: 0.3047 MiB 
    axlsx/stylesheet/styles.rb: 0.8516 MiB 
    htmlentities: 0.5273 MiB 
    htmlentities/flavors: 0.4453 MiB 
     htmlentities/mappings/expanded: 0.4258 MiB 
    axlsx/util/simple_typed_list.rb: 0.4727 MiB 

So frage ich mich. .. wenn rails/ruby ​​das Laden eines Edelsteins erlauben?

Ich hoffe, ich bin klar genug. :-) Danke!

+0

Haben Sie darüber nachgedacht eine verzögerte Job Arbeitswarteschlange, wie resque? Das würde es komplett aus Ihrer Rails-App herausnehmen, obwohl es seinen eigenen Overhead erzeugen würde. – noel

+0

Vielen Dank für den Kommentar. Mein Punkt ist es wirklich, beim App-Start weniger Speicher zu verbrauchen. –

Antwort

0

Im Gemfile:

gem 'axlsx', :require => false 

Im Modell:

require 'axlsx'