将vendor / assets / javascripts添加到我的有效资产路线

时间:2011-12-09 19:47:45

标签: ruby-on-rails ruby-on-rails-3 asset-pipeline

我正在尝试做这项工作,但这让我很生气。我已经在

中设置了这个

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] &quot;/assets/ext-all-debug.js&quot;</pre></p>

4 个答案:

答案 0 :(得分:5)

我认为供应商已经包含在您的资产路径中,请使用rails控制台进行检查

rails console
Rails.application.config.assets.paths.each do |path|; puts path; end

然而最简单的可能是这个

  • 将ext放在app / assets / javascripts / lib
  • require_tree将已加载或明确

的application.js

//= require ./lib/ext-all-debug.js

如果你真的想要它在供应商

  • 创建dir vendor / assets / javascripts / ext
  • 创建清单文件vendor / assets / javascripts / ext / index.js
  • 将ext-all-debug.js放入vendor / assets / javascripts / ext /

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是一个好的开始。