css - rails - 在生产模式下找不到 application.css Assets

标签 css ruby-on-rails ruby-on-rails-3 asset-pipeline

我正在升级应用程序以使用 Assets 管道。

我已经将 css Assets 编译成一个应用程序 css 文件,但是当我在生产模式下运行应用程序时找不到它们

RAILS_ENV=production bundle exec rails s

我访问了任何页面,我从数据库中获得了正确的输出,但没有样式,并且日志显示:

ActionController::RoutingError (No route matches [GET] 
"/assets/default.scss-1a27c...f07c.css"):

即使该文件存在于 public/assets 中

$ ls public/assets/def*
public/assets/default.scss-1a27c...f07c.css     public/assets/default.scss.css
public/assets/default.scss-1a27c...f07c.css.gz  public/assets/default.scss.css.gz

我需要更改什么才能让服务器找到 Assets 文件?

我的其他 .css 文件也发生了同样的情况。它们被编译成带有指纹的公共(public)/ Assets ,但随后找不到。

页面源显示:

<link href="/assets/default.scss-1a27c...f07c.css" 
media="screen" rel="stylesheet" type="text/css" />

rails (haml) 源是 = stylesheet_link_tag 'default.scss.css'

public.assets 当前包含以下文件。

$ ls public/assets/def*
public/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css
public/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css.gz
public/assets/default.scss.css
public/assets/default.scss.css.gz

application.rb 有

$ cat config/application.rb 
require File.expand_path('../boot', __FILE__)

# Pick the frameworks you want:
require "active_record/railtie"
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"
# require "rails/test_unit/railtie"

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

module Linker
  class Application < Rails::Application
    config.encoding = "utf-8"
    config.filter_parameters += [:password]
    config.assets.enabled = true
    config.assets.initialize_on_precompile = false # For Heroku
    config.assets.version = '1.0'
  end
end

config/environments/production 有:

$ cat config/environments/production.rb 
Linker::Application.configure do
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.assets.precompile += ['default.scss.css','main.css', 'jquery-ui-1.8.22.custom.css']
  config.serve_static_assets = false
  config.assets.compress = true
  config.assets.compile = false
  config.assets.digest = true
  config.log_level = :debug
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
end

这似乎发生在所有 Assets 上,例如

Started GET "/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/default.scss-1a27c22229b7b522066181f27af4f07c.css"):
Started GET "/assets/main-6864687b4114a1c316e444bd90f233ff.css" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/main-6864687b4114a1c316e444bd90f233ff.css"):
Started GET "/assets/jquery-ui-1.8.22.custom-24319b4b1218846a3fe22a0479ae98b4.css" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/jquery-ui-1.8.22.custom-24319b4b1218846a3fe22a0479ae98b4.css"):
Started GET "/assets/application-fc1d492d730f2a45581a40eac4607db8.js" for 127.0.0.1 at 2014-02-23 10:24:47 -0500
ActionController::RoutingError (No route matches [GET] "/assets/application-fc1d492d730f2a45581a40eac4607db8.js"):
Started GET "/images/link.ico" for 127.0.0.1 at 2014-02-23 10:24:48 -0500
ActionController::RoutingError (No route matches [GET] "/images/link.ico"):

最佳答案

默认情况下,Rails 不提供 public 下的资源。查看您的 production.rb:

  config.serve_static_assets = true

将其更改为 true 就可以了。 (注意:您不希望它在生产中为 true,请记住在部署之前将其改回原样!)

参见 Configuring Rails Applications了解详情。

在rails 6中,默认的production.rb应该有一行

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?

所以运行你的服务器

RAILS_SERVE_STATIC_FILES=true rails server -e production

或在 production.rb 中设置 config.public_file_server.enabled=true。请参阅下面关于 rails 4 和 5 的答案。

关于css - rails - 在生产模式下找不到 application.css Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21969549/

相关文章:

css - 无法在页面上水平居中元素

ruby-on-rails - Rails ActiveRecord 属性的不同计数大于出现次数

ruby-on-rails - 未初始化的常量 CarrierWave::Video

ruby-on-rails - 如何在 rails-api gem 中使用 View 助手?

css - z-index 没有按应有的方式分层

javascript - jquery select 标签没有被带到前面

html - div css3名称问题

ruby-on-rails - 通过 activerecord-sqlserver-adapter 连接到 SQL Server 2005 时从 Rails 执行 SQL 查询

ruby-on-rails - 如何通过表单获取临时文件的内容

datetime - ActiveRecord/Rails 3 中的日期格式