如何禁用heroku上的资产编译?

bxjv4tth  于 2023-04-30  发布在  其他
关注(0)|答案(6)|浏览(99)

我尝试使用以下turorial将我的Rails应用部署到heroku:
https://devcenter.heroku.com/articles/getting-started-with-rails4
我使用Rails 4。1.1和ruby 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
但是当我将app部署到heroku时,它会编译我所有的js-files文件到application中。js和所有css-files应用程序。css.我在www. example上看不到 www.example.com using firebug.
我需要对我的配置做些什么才能在www. example上看到我所有的js和css文件 www.example.com 禁用heroku上的资产预编译和缩小?
请帮帮我!谢谢

vxqlmq5t

vxqlmq5t1#

lib/tasks/assets。耙

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

你完了

piwo6bdm

piwo6bdm2#

config/environments/development.rbconfig/environments/production.rb比较。
并进行生产。像开发中那样配置rb资产。rb:
注解此行:

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

然后:
1.将我的更改推送到git repo git push origin master
1.将更改推送到heroku git push heroku master

bprjcwpo

bprjcwpo3#

Rails 4应用程序有manifest-*.json文件,而不是manifest.yml文件。这个文件通常是在运行rake assets:precompile时生成的,您是如何编译资产的?
无论如何,您需要一个文件public/assets/manifest-(fingerprint).json文件

qzlgjiam

qzlgjiam4#

快进到2018年,您需要将以下内容添加到config/initializers/production.rb中:

config.assets.enabled = false

然后,您需要自定义Heroku's Ruby Buildpack以不运行assets:precompile rake任务。我不会提供这样一个buildpack的链接,因为我不支持或保证这样一个buildpack,但是在lib/language_pack/ruby.rb中很容易找到它并开始删除相关代码。
然后,你必须配置你的Heroku应用程序使用你的新的分支构建包,而不是默认的(e.例如使用heroku buildpacks)。
这是禁用Heroku应用程序w/ Rails中资产管道的最干净的方法,而不需要重写Rails的内置rake任务。

wlwcrazw

wlwcrazw5#

快进到2021年和Rails 6。x,如果您完全删除了Webpacker和Sprockets/Asset Pipeline,请将bin/yarn文件内容替换为以下内容:

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

@danielricecodes的建议可能仍然有效,但更具侵略性。

zc0qhyus

zc0qhyus6#

如果你根本不使用Rails资产管道线(sprocketssprockets-rails),你可以删除这些gem。这将删除assets:precompile Rake任务,Heroku将跳过它,因为它找不到它(源代码-自Rails 4起)
端到端方法将是:
1.禁用资源管道:

config.assets.enabled = false

1.删除sprocketssprockets-rails以删除assets:precompile的定义。坏消息是,没有办法轻松地删除这些gem,因为它们预先打包了rails。默认情况下,rails需要几个gem,包括rake任务。但是,您可以选择单独列出rails依赖项的名称,并且可以从列表中排除sprockets

require 'rails'
require 'active_record/railtie'
require 'active_storage/engine'
require 'action_controller/railtie'
require 'action_view/railtie'
require 'action_mailer/railtie'
require 'active_job/railtie'
require 'action_cable/engine'
require 'action_mailbox/engine'
# require 'sprockets/railtie' <--- Comment out or remove this
require 'action_text/engine'

require 'rails/test_unit/railtie'

:自7.0.0-alpha3起,自动排除sprockets。参见DHH的the commit that removed sprockets

相关问题