Skip to main content
 首页 » 编程设计

ruby-on-rails之javascript_include_tag Rails 4在生产中生成 “/javascripts/”而不是 “/assets”

2024年09月07日23rubylouvre

我有一个Rails 4应用程序

<%= javascript_include_tag "modernizr", "data-turbolinks-track" => true %> 

在头上。在开发中,呈现以下HTML,并加载了modernizr:
<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script> 

在生产中,将呈现followign HTML,并且不会加载modernizr(未找到404):
<script data-turbolinks-track="true" src="/javascripts/modernizr.js"></script> 

在生产中,找到了 /assets/modernizr.js并且可以浏览。

Rails documentation表示 javascript_include_tag应该生成
<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script> 

在生产中,我的 stylesheet_link_tag很好,可以链接到 /assets/目录。

为什么在生产环境中 javascript_include_tag链接到 /javascripts而不是 /assets,我该如何解决?

请您参考如下方法:

AssetUrlHelper的用法说明之一表明它将产生/ javascripts /网址
就像您所看到的:

#asset_path“应用程序”,键入::javascript#=> /javascripts/application.js

(摘自asset_url_helper.rb第117行-[1])

该代码看起来只有在缺少预编译 Assets 的情况下才能到达
因此您的 Assets 编译似乎无法正常工作(通常是我的部署
发生这种情况时会失败,所以也许您甚至没有解雇。

相同的asset_url_helper.rb将/ javascripts /部分称为“extname”,
使用以下映射了解如何生成名称:

 # Maps asset types to public directory. 
  ASSET_PUBLIC_DIRECTORIES = { 
    audio:      '/audios', 
    font:       '/fonts', 
    image:      '/images', 
    javascript: '/javascripts', 
    stylesheet: '/stylesheets', 
    video:      '/videos' 
  } 

一个新的Rails 4应用程序在config / environments / production.rb中具有此功能
  # Do not fallback to assets pipeline if a precompiled asset is missed. 
  config.assets.compile = false 

这似乎与您看到的行为相符。