我正在尝试做这项工作,但这让我很生气。我已经在
中设置了这个application.rb中
config.assets.paths << Rails.root.join("vendor", "assets", "javascripts").to_s
(。to_s因为它返回一个对象,而我在这里需要一个字符串)。 我无法找到解决方案,并且让我发疯,因为供应商中的样式表目录有效,但javascripts却没有。
我该怎么做?
错误返回:
<h1>Routing Error</h1>
<p><pre>No route matches [GET] "/assets/ext-all-debug.js"</pre></p>
答案 0 :(得分:5)
我认为供应商已经包含在您的资产路径中,请使用rails控制台进行检查
rails console
Rails.application.config.assets.paths.each do |path|; puts path; end
然而最简单的可能是这个
的application.js
//= require ./lib/ext-all-debug.js
如果你真的想要它在供应商
index.js的代码
//= require ./ext-all-debug.js
application.js的代码
//= require ext
这是索引清单文件所在的目录的名称
重新启动rails服务器
如果您不想通过application.js加载extjs,即您只想在特定页面上包含extjs lib
<%= javascript_include_tag "ext" %>
答案 1 :(得分:1)
您可以添加:
//= require_tree ../../../vendor/assets/javascripts
到您的application.js
文件。
答案 2 :(得分:1)
阅读更新
看起来这个问题与EXT拥有自己的相对路径的结构路径构建这一事实有关。
我通过保留整个ext目录结构解决了这个问题(没有在任何地方拆分图像),我将它添加到vendor / externals目录(由我创建)。然后我添加了路径:
config.assets.paths << Rails.root.join("vendor", "assets", "externals").to_s
现在通过使用// = require ext-all-debug.js
引用它可以正常工作2013年12月23日更新:
从Rails 3开始,请注意默认添加了此目录。
答案 3 :(得分:0)
从我提供的信息中看出问题并不容易,因为我认为问题出在其他地方。
资产管道的目的是将所有 javascripts放入一个文件中。该文件包含在HTML文档中。所以关键是一个大的JS文件。嗯,它可能会更复杂,但我认为这不一定是你的情况。
例如,在您的布局ERB(通常是app/views/layout/application.erb
)中:
<head>
...
<%= javascript_include_tag "application" %>
</head>
和app/assets/javascripts/application.js
:
//= require ext_all_debug
//= ...
当请求HTML页面时,它会询问“application.js”,并且它是以您的供应商JS代码嵌入到此文件中的方式生成的(请注意,该文件中没有路径)。
最后一件事 - 测试生产环境中的行为非常重要,因为通常那些生成的JS文件将由nginx / apache提供服务。 rake assets:precompile
是一个好的开始。