Как отключить компиляцию ресурсов на героку?

Я пытаюсь развернуть свое приложение rails на героку, используя этот учебник:

https://devcenter.heroku.com/articles/getting-started-with-rails4

Итак, я использую рельсы 4.1.1 и рубин 2.1.1.

В моем Gemfile есть gem 'rails_12factor', group: :production.

Мое приложение.rb:


require File.expand_path('../boot', __FILE__)

require 'rails/all'

Bundler.require(*Rails.groups)

module Charticus
  class Application  Rails::Application
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
    # config.time_zone = 'Central Time (US & Canada)'

    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
    # config.i18n.default_locale = :de
  end
end

Я создал файл public/assets/manifest.yml

Но когда я развертываю приложение на героку, оно компилирует все мои js-файлы в application.js и все css-файлы в application.css. И я не вижу его на app.heroku.com с помощью firebug.

Что мне нужно сделать с моими конфигурациями, чтобы увидеть все мои файлы js и css на app.heroku.com? Как отключить предварительную компиляцию и минификацию ресурсов на героку?

Помоги мне, пожалуйста! Спасибо


person bmalets    schedule 15.05.2014    source источник


Ответы (5)


lib/tasks/assets.rake

Rake::Task["assets:precompile"].clear
   namespace :assets do
     task 'precompile' do
     puts "Not pre-compiling assets..."
   end
end

Вы сделали.

person Saqib R.    schedule 20.05.2015
comment
В моем случае я должен был написать это Rakefile. - person Kazuya Gosho; 06.04.2020

Я сравниваю config/environments/development.rb и config/environments/production.rb.

И сделайте конфиги ассетов production.rb как в development.rb:

Прокомментируйте эти строки:

  • config.serve_static_assets = false
  • config.assets.js_compressor = :uglifier
  • config.assets.compile = false
  • config.assets.digest = true

Потом:

  1. Отправьте мои изменения в репозиторий git git push origin master
  2. Внесите изменения в героку git push heroku master
person bmalets    schedule 15.05.2014
comment
Мне также пришлось добавить настройку config.assets.debug = true. - person Heliostatic; 28.07.2014
comment
Это не мешает сборочному пакету Heroku Ruby вызывать задачу rake assets:precompile rake. Он просто настраивает производственную среду так, чтобы она была похожа на среду разработки. - person danielricecodes; 20.03.2018

Приложения Rails 4 имеют файл manifest-*.json, а не файл manifest.yml. Этот файл обычно создается, когда вы запускаете rake assets:precompile , как вы компилируете свои активы?

Несмотря ни на что, вам нужен файл public/assets/manifest-(fingerprint).json файл

person catsby    schedule 15.05.2014
comment
Я создаю public/assets/manifest-(fingerprint).json, и теперь приложение heroku не может найти application.css и application.js... - person bmalets; 16.05.2014
comment
Что ты пытаешься сделать? Вы выполняете компиляцию ресурсов локально? Затем для вас создается файл манифеста. Это не просто пустой файл... - person catsby; 17.05.2014

Перенесемся в 2018 год, и вам нужно будет добавить следующее к config/initializers/production.rb:

config.assets.enabled = false

Затем вам нужно будет настроить сборочный пакет Heroku Ruby, чтобы он не запускал задачу assets:precompile rake. Я не буду предоставлять ссылку на такой сборочный пакет, потому что я не буду его поддерживать или гарантировать, но его довольно легко найти в lib/language_pack/ruby.rb и начать удаление соответствующего кода.

Затем вам нужно будет настроить приложение Heroku для использования вашего нового разветвленного пакета сборки вместо стандартного (например, с использованием heroku buildpacks).

Это самый простой способ отключить конвейер ресурсов в приложении Heroku с Rails, не прибегая к переопределению встроенных в Rails задач rake.

person danielricecodes    schedule 20.03.2018

Перенесемся в 2021 и Rails 6.x, если вы полностью удалили Webpacker и Sprockets/Asset Pipeline, замените содержимое файла bin/yarn чем-то вроде:

#!/usr/bin/env ruby
puts 'Yarn not present, nothing to do.'

Совет @danielricecodes, вероятно, все еще актуален, но гораздо более агрессивен.

person Silvio Relli    schedule 29.01.2021