我正在尝试使用此教程将我的 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 上禁用资产预编译和缩小?
请帮帮我! 谢谢
lib/tasks/assets.rake
Rake::Task["assets:precompile"].clear
namespace :assets do
task 'precompile' do
puts "Not pre-compiling assets..."
end
end
你完成了。
我比较
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
然后:
git push origin master
git push heroku master
Rails 4 应用程序有一个
manifest-*.json
文件,而不是一个 manifest.yml
文件。这个文件通常是在你运行 rake assets:precompile
时生成的,你是如何编译你的资产的?
无论如何,你需要一个文件
public/assets/manifest-(fingerprint).json
文件
快进到 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 任务。
快进到 2021 年和 Rails 6.x,如果您完全删除了 Webpacker 和 Sprockets/Asset Pipeline,请将
bin/yarn
文件内容替换为:
#!/usr/bin/env ruby
puts 'Yarn not present, nothing to do.'
@danielricecodes 的建议可能仍然有效,但更具侵入性。
一个选项是您可以禁用资产管道:
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