diff --git a/lib/tasks/assets.rake b/lib/tasks/assets.rake index 90820357255..34a3e45ac78 100644 --- a/lib/tasks/assets.rake +++ b/lib/tasks/assets.rake @@ -9,14 +9,20 @@ task 'assets:precompile:before' do end if ENV["EMBER_CLI_COMPILE_DONE"] != "1" - compile_command = "NODE_OPTIONS='--max-old-space-size=2048' yarn --cwd app/assets/javascripts/discourse run ember build -prod" + compile_command = "yarn --cwd app/assets/javascripts/discourse run ember build -prod" + + if check_node_heap_size_limit < 1024 + STDERR.puts "Detected low Node.js heap_size_limit. Using --max-old-space-size=1024." + compile_command = "NODE_OPTIONS='--max-old-space-size=1024' #{compile_command}" + end + only_assets_precompile_remaining = (ARGV.last == "assets:precompile") if only_assets_precompile_remaining # Using exec to free up Rails app memory during ember build exec "#{compile_command} && EMBER_CLI_COMPILE_DONE=1 bin/rake assets:precompile" else - system compile_command + system compile_command, exception: true end end @@ -91,6 +97,12 @@ task 'assets:flush_sw' => 'environment' do end end +def check_node_heap_size_limit + output, status = Open3.capture2("node", "-e", "console.log(v8.getHeapStatistics().heap_size_limit/1024/1024)") + raise "Failed to fetch node memory limit" if status != 0 + output.to_f +end + def assets_path "#{Rails.root}/public/assets" end