css - Rails Assets 未预编译,css 在生产环境中看起来不同

标签 css ruby-on-rails ruby-on-rails-4 assets

我的 Rails 应用程序在开发模式下工作并看起来完全符合我的要求,但在生产中它在 chrome 和 safari 上看起来不同,在 safari 中加载 Logo 图像但不加载字体,在 chrome 中加载字体但不加载图像加上输入字段在 chrome 中稍长且未对齐,但在开发模式下,chrome 看起来一切都很好

我已经弄乱了一段时间并删除了几次 public/assets

rake assets:precompile RAILS_ENV=production 

没有成功,预编译没有错误

配置/应用程序.rb:

 # 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.
 config.assets.paths << "#{Rails.root}/assets/fonts"
 config.assets.paths << "#{Rails.root}/assets/images"
 config.assets.paths << Rails.root.join("app", "assets", "fonts")
 config.assets.precompile += %w( .svg .eot .woff .ttf )


# 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
config.assets.enabled = true  
#config.assets.paths << "#{Rails.root}/app/assets/fonts" 

配置/环境/生产:

# Code is not reloaded between requests.
config.cache_classes = true

# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both thread web servers
# and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance.
config.eager_load = true

# Full error reports are disabled and caching is turned on.
config.consider_all_requests_local       = false
config.action_controller.perform_caching = true

# Enable Rack::Cache to put a simple HTTP cache in front of your application
# Add `rack-cache` to your Gemfile before enabling this.
# For large-scale production use, consider using a caching reverse proxy like nginx,  varnish or squid.
# config.action_dispatch.rack_cache = true

# Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_assets = true
#config.assets.compile = true

config.assets.precompile =  ['*.js', '*.css', '*.css.erb', '*.css.scss'] 
# Compress JavaScripts and CSS.
config.assets.js_compressor = :uglifier
# config.assets.css_compressor = :sass
config.assets.paths << "#{Rails.root}/assets/fonts"
config.assets.paths << "#{Rails.root}/assets/images"
config.assets.precompile += %w( .svg .eot .woff .ttf )
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/
# Generate digests for assets URLs.
config.assets.digest = true

# Version of your assets, change this if you want to expire all your assets.
config.assets.version = '1.0'

最佳答案

在您的 config/environments/production.rb 文件中,设置:

config.serve_static_assets = false (当前设置为 true)

config.assets.compile = true (当前设置为 false)

这应该可以解决您的问题。

让我解释一下我要你做什么。

  • 通过设置 config.serve_static_assets = false,我们告诉 Rails 服务器,不要添加用于提供静态 Assets 的 ActionDispatch::Static 中间件。

为什么不呢?

那是因为在生产环境中,您应该在网络服务器(如 Apache/Nginx)后面运行您的应用程序服务器(如 puma),该服务器旨在直接为静态文件(包括 Assets )提供服务,而无需费心发送向 Rails 应用程序服务器请求。

由于您没有使用任何网络服务器,我们将其关闭。

  • 通过设置 config.assets.compile = true,我们告诉 Rails 在运行时编译请求的 Assets 。即在 app/assetsvendor/assetslib/assets 中查找请求的 Assets ,如果从这些位置中的任何一个找到,则提供它。

默认情况下,config.assets.compile在开发环境中为true,在生产环境中为false。由于我们没有使用网络服务器来提供静态 Assets ,我们要求 Rails 实时编译我们的 Assets 。

有关详细信息,请参阅 asset pipeline documentation .

关于css - Rails Assets 未预编译,css 在生产环境中看起来不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23095416/

相关文章:

html - 如何居中对齐图像并在悬停时覆盖文本?

ruby-on-rails - 运行本地 Web 服务器是什么意思?

ruby-on-rails - 将现有用户详细信息迁移到新的身份验证系统

ruby-on-rails - Rails NameError 未初始化常量(模型和命名空间冲突)

html - 当我在我的网站上从一个页面跳到下一个页面时,它会在 Chrome 中公开 HTML

html - 如何修复 Lighthouse "Links do not have a discernible name"

css - 列跨度 : all conflicts with overflow and float

javascript - 时刻未捕获类型错误 : Cannot read property 'format' of undefined at time

ruby-on-rails - 如何在Rails应用程序中导入SCSS mixins?

ruby-on-rails - 在 Rails 中测试 Rake : Multiple Error Raises Silenced In Test