Rails 应用程序在生产环境中不提供 JS 和 SCSS 资产

Posted

技术标签:

【中文标题】Rails 应用程序在生产环境中不提供 JS 和 SCSS 资产【英文标题】:Rails app doesn't serve JS and SCSS assets in production environment 【发布时间】:2015-11-12 16:46:04 【问题描述】:

首先,在开发环境中一切正常。 但是,如果我切换到生产环境,我的 Rails 应用程序不提供 JS 和 CSS 资产。

我将资产部署到公共目录:

 rake assets:precompile RAILS_ENV=production

没有错误。

日志说:

ActionController::RoutingError (No route matches [GET] "/assets/custom-9f5239947caa407b080981084efbe1b998006e083c7c79e950376483e1ac0f27.css"):

ActionController::RoutingError (No route matches [GET] "/assets/application-5e67105cb72dda5c0d9dcc451a325501380be971c097076180211f3e90a99ba3.js"):

assets.rb

Rails.application.config.assets.precompile += %w( cocoon.js )

生产.rb

config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local       = false
config.action_controller.perform_caching = true
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass
config.assets.compile = false
config.assets.digest = true
config.log_level = :debug
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
config.active_record.dump_schema_after_migration = false

宝石文件

source 'https://rubygems.org'
gem 'carrierwave', '~> 0.10.0'
gem 'mini_magick'
gem 'minitest'
gem 'rails', '4.2.0'
gem 'rack'
gem 'sprockets'
gem 'therubyracer'
gem 'execjs'
gem 'sqlite3'
gem 'sass-rails', '~> 5.0'
gem 'sprockets'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'bcrypt'
gem 'bootstrap-sass', '~> 3.2.0.0'
gem 'bootstrap-will_paginate'
gem 'thin'
gem 'fog', '~> 1.23.0'
gem 'faker'
gem 'rails-i18n', github: 'svenfuchs/rails-i18n', branch: 'master' # For 4.x
gem 'simple_hashtag'
group :development, :test do
  gem 'byebug'
  gem 'web-console', '~> 2.0'
end
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'cocoon', '~> 1.2.0'
gem 'haml', '~> 4.0.6'

【问题讨论】:

您能给我们提供有关您的生产环境的任何详细信息吗?是 Heroku 吗? 【参考方案1】:

也许你可以试试这个:

Rails.application.config.assets.precompile += %w( custom.css ) # Because Asset Pipeline by default only compress application.(css|js)

还有这个:

config.serve_static_files = false

我希望这对你有用:D

【讨论】:

i,[2015-11-13T16:11:55.503532#5116] Info - :开始获取“/scustom-9f52390954FBe1b998006e083c7c7981084fto1b998006e083c7c7981084fto1b998006e0376483e1ac0f27.css”在2015-11-13 16 :11:55 +0100 F, [2015-11-13T16:11:55.505532 #5116] FATAL -- : ActionController::RoutingError (No route matches [GET] "/assets/custom-9f5239947caa407b080981084efbe1b998006e083c7c79e95037648跨度> 另外,把它放在你的 config/application.rb 中:config.assets.initialize_on_precompile = false【参考方案2】:

在 production.rb 中,我将 config.assets.compile 从 false 更改为 true:

config.assets.compile = true

【讨论】:

是的,这是一种简单的解决方法,但不建议这样做,因为每次需要时都会编译资产。这可能会导致用户超时。您可以检查是否在生产中设置了 RAILS_SERVE_STATIC_FILES 的环境变量,默认设置为 config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

以上是关于Rails 应用程序在生产环境中不提供 JS 和 SCSS 资产的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5 缓存在本地或生产环境中不起作用

rails 4.1.0.rc1 nginx 和 unicorn 未在生产环境中提供资产

Next js 在生产环境中不使用 cookie

另一个“Heroku Rails 4 中不显示 Foundation 图标”的帖子

在 Rails 4 生产环境中找不到资产的 404 错误

为啥 jQuery 在我的 rails 5 应用程序中不起作用?