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

问题描述 投票:0回答:6

我正在尝试使用此教程将我的 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

但是当我将应用程序部署到 heroku 时 - 它会将我所有的 js 文件编译为 application.js 和所有 css 文件 application.css。而且我无法使用 firebug 在 app.heroku.com 上看到它。

我需要如何处理我的配置才能在 app.heroku.com 上查看我的所有 js 和 css 文件? 如何在 heroku 上禁用资产预编译和缩小?

请帮帮我! 谢谢

heroku ruby-on-rails-4 asset-pipeline assets precompile
6个回答
11
投票

lib/tasks/assets.rake

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

你完成了。


3
投票

我比较

config/environments/development.rb
config/environments/production.rb

并像在 development.rb 中一样制作 production.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
  2. 将更改推送到 heroku
    git push heroku master

0
投票

Rails 4 应用程序有一个

manifest-*.json
文件,而不是一个
manifest.yml
文件。这个文件通常是在你运行
rake assets:precompile
时生成的,你是如何编译你的资产的?

无论如何,你需要一个文件

public/assets/manifest-(fingerprint).json
文件


0
投票

快进到 2018 年,您需要将以下内容添加到

config/initializers/production.rb

config.assets.enabled = false

然后您需要自定义 Heroku 的 Ruby Buildpack 以不运行

assets:precompile
rake 任务。我不会提供这样一个构建包的链接,因为我不会支持或保证它,但它很容易在
lib/language_pack/ruby.rb
中找到它并开始删除相关代码。

然后您必须配置您的 Heroku 应用程序以使用新的分叉 Buildpack 而不是默认的(例如使用

heroku buildpacks
)。

这是在带有 Rails 的 Heroku 应用程序中禁用资产管道的最干净的方法,而无需求助于覆盖 Rails 的内置 rake 任务。


0
投票

快进到 2021 年和 Rails 6.x,如果您完全删除了 Webpacker 和 Sprockets/Asset Pipeline,请将

bin/yarn
文件内容替换为:

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

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


0
投票

一个选项是您可以禁用资产管道:

config.assets.enabled = false

或者,如果您根本不使用 Rails Asset Pipleine(

sprockets
sprockets-rails
),您可以删除那些 gem。这将删除
assets:precompile
Rake 任务,Heroku 将跳过它,因为它找不到它(source - 自 Rails 4 起)

删除

sprockets
sprockets-rails
以删除
assets:precompile
的定义。坏消息是,无法轻松移除这些宝石,因为它们预先包装有
rails
。默认情况下
rails
需要几个宝石,包括 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
被自动排除。请参阅删除
sprockets
的提交,来自DHH

© www.soinside.com 2019 - 2024. All rights reserved.