2016-09-28 211 views
4

我试图在生产环境中部署Rails Web服务器上的ruby。我无法使资产加载到生产环境中:.css,.js和图像(由于),似乎在开发过程中工作正常)。Rails 4.1.6资产管道没有在生产中加载资产和javascript

这里是我的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资产:我的生产服务器上的预编译也不起作用。我如何获得使用指纹版本的导轨?

在玩弄某些设置,我能够得到它通过改变这些设置工作:

config.assets.compile = true 


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

我相信,这将大大放缓,表现我不想在生产中进行编译。我需要纠正解决这个问题的方法。任何帮助将不胜感激!

注:我也注意到,我在/资产/ JavaScript的一个application.js中,但我有一个application.css.scss /资产/样式 - 不知道这是否会影响它

回答

0

所以原来是一个简单的解决方案。我用的是搬运工推到生产,需要将这行添加到我的Dockerfile

RUN rake assets:precompile 

此预编译的资产,并增加了指纹,使他们能够在生产中提供服务。干杯!