Rails 4.1.6资产管道没有在生产中加载资产和javascript

时间:2016-09-28 15:51:52

标签: ruby ruby-on-rails-4 asset-pipeline erb production

我在rails web服务器上有一个ruby,我正在尝试在生产中部署。我无法在生产中加载资产:.css,.js和images(由于开发似乎工作正常)。

这是我的production.rb

Rails.application.configure do

  # 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 threaded 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

  config.serve_static_files = true

  # Compress JavaScripts and CSS.
  config.assets.js_compressor = :uglifier

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = false

  # Generate digests for assets URLs.
  config.assets.digest = true
end

我以前有这个服务器的部署版本,其标签在application.html.erb中看起来像这样:

<head>
  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
</head>
生产中的

(加载css / js)

<link data-turbolinks-track="true" href="/assets/application-06ed3643d0bf74fdf192f533cc269506.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-f134ff018deb0477bd5ad046d853559d.js"></script>

现在部署我的应用程序时,它看起来像这样(没有指纹)。预编译似乎不起作用。公共/资产中没有生成文件,这是一个问题。目前我的应用程序清单看起来像这样

<link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/javascripts/application.js"></script>

我认为资产管道和预编制资产存在问题。它应该生成css和js的指纹版本并使用它们。即使运行rake资产:我的生产服务器上的预编译也不起作用。如何让rails使用指纹版本?

在玩某些设置时,我可以通过更改这些设置让它工作:

config.assets.compile = true


Rails.application.config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/

我认为这会大大降低性能,因为我不想在生产中编译。我需要纠正解决这个问题的方法。任何帮助将不胜感激!

注意:我还注意到我在/ assets / javascripts中有一个application.js,但我在/ assets / stylesheets中有一个application.css.scss - 不确定这是否会影响它

1 个答案:

答案 0 :(得分:0)

所以事实证明这是一个简单的解决方案。我正在使用docker进行生产,需要将此行添加到我的Dockerfile

RUN rake assets:precompile

这会预编译资产并添加指纹,以便在生产中提供服务。干杯!