Rails 4.1.6 资产管道未加载资产和 javascript 在生产中
Rails 4.1.6 Asset pipeline not loading assets and javascript in production
我在 rails Web 服务器上有一个 ruby,我正试图将其部署到生产环境中。我在生产中加载资产时遇到问题:.css、.js 和图像(由于 ,在开发中似乎工作正常)。
这是我的 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>
现在部署我的应用程序时它看起来像这样(没有指纹)。预编译似乎不起作用。 public/assets 中没有生成文件,这是个问题。目前我的应用程序清单看起来像这样
<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 assets:precompile 在我的生产服务器上也不起作用。如何让rails使用指纹版?
在尝试某些设置时,我能够通过更改这些设置使其正常工作:
config.assets.compile = true
Rails.application.config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/
我相信这会大大降低性能,因为我不想在生产环境中编译。我需要正确的方法来解决这个问题。任何帮助将不胜感激!
注意:我还注意到我在 /assets/javascripts 中有一个 application.js 但我在 /assets/stylesheets 中有一个 application.css.scss -- 不确定这是否会影响它
原来这是一个简单的解决方案。我正在使用 docker 推送到生产环境,需要将此行添加到我的 Dockerfile
RUN rake assets:precompile
这会预编译资产并添加指纹,以便它们可以在生产中使用。干杯!
我在 rails Web 服务器上有一个 ruby,我正试图将其部署到生产环境中。我在生产中加载资产时遇到问题:.css、.js 和图像(由于 ,在开发中似乎工作正常)。
这是我的 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>
现在部署我的应用程序时它看起来像这样(没有指纹)。预编译似乎不起作用。 public/assets 中没有生成文件,这是个问题。目前我的应用程序清单看起来像这样
<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 assets:precompile 在我的生产服务器上也不起作用。如何让rails使用指纹版?
在尝试某些设置时,我能够通过更改这些设置使其正常工作:
config.assets.compile = true
Rails.application.config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/
我相信这会大大降低性能,因为我不想在生产环境中编译。我需要正确的方法来解决这个问题。任何帮助将不胜感激!
注意:我还注意到我在 /assets/javascripts 中有一个 application.js 但我在 /assets/stylesheets 中有一个 application.css.scss -- 不确定这是否会影响它
原来这是一个简单的解决方案。我正在使用 docker 推送到生产环境,需要将此行添加到我的 Dockerfile
RUN rake assets:precompile
这会预编译资产并添加指纹,以便它们可以在生产中使用。干杯!