我正在尝试使用 Ruby on Rails 构建我的第一个网站。
我已经阅读了有关 Assets 管道的内容,并且我有一个特定的 View ,需要引用 3 个 JS 库,而其他文件不需要引用。
我不想将它们用作 require
assets/javascripts
中的指令明显,因为它们最终会出现在不需要它们的所有其他页面上。
所以,我想我可以简单地将它们包含在 View 模板中。
<小时/>但是,我收到 404:找不到文件 错误。
这就是我将它们包含在模板中的方式 /app/views/welcome/index.html.erb
:
<%= javascript_include_tag "/lib/assets/javascripts/three.js" %>
<%= javascript_include_tag "/lib/assets/javascripts/perlin.js" %>
<%= javascript_include_tag "/lib/assets/javascripts/cube.js" %>
这被渲染为 <body>
内的第一行标签(这是因为模板中的代码是根据/app/views/layouts/application.html.erb
中的yield标签渲染的,并且yield
标签放置在body
标签内)
如您所见,这些文件位于 lib/assets/javascripts
我正在尝试使用完整路径(相对于网络根目录)来访问它们。
这是尝试渲染其中一个库时在服务器上生成的错误消息的示例:
Started GET "/lib/assets/javascripts/three.js" for 127.0.0.1 at 2015-03-15 11:30:52 -0400
ActionController::RoutingError (No route matches [GET] "/lib/assets/javascripts/three.js"):
actionpack (4.2.0) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
web-console (2.1.0) lib/web_console/middleware.rb:37:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.0) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.0) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.0) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.0) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.0) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.0) lib/rack/lock.rb:17:in `call'
actionpack (4.2.0) lib/action_dispatch/middleware/static.rb:113:in `call'
rack (1.6.0) lib/rack/sendfile.rb:113:in `call'
railties (4.2.0) lib/rails/engine.rb:518:in `call'
railties (4.2.0) lib/rails/application.rb:164:in `call'
rack (1.6.0) lib/rack/lock.rb:17:in `call'
rack (1.6.0) lib/rack/content_length.rb:15:in `call'
rack (1.6.0) lib/rack/handler/webrick.rb:89:in `service'
/home/luke/.rbenv/versions/2.2.0/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
/home/luke/.rbenv/versions/2.2.0/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
/home/luke/.rbenv/versions/2.2.0/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
<小时/>
编辑
人们建议我移动我的文件。你能解释一下为什么我不能把它们放在 lib
中吗? ?文档说 lib/assets
是库应该去的地方,我同意这个组织。
/public
保留目录只是为了向后兼容我所读到的内容(它甚至不再默认创建)
最佳答案
将您的 Javascript 放入 /app/assets/javascripts
中,您就可以像这样包含它:
<%= javascript_include_tag 'file-name' %>
请注意,您不应包含该扩展程序。 Rails 会为您找到它。
每个 Controller 都有自己的 Javascript 和 CSS 文件,使用它们是一个好主意。
请注意,如果添加更多资源,则必须将 Rails.application.config.assets.precompile += %w( [file name] )
添加到 config/initializers/assets.rb
并重新启动服务器
Libs 并不完全符合您的想法,并且使用 public 是一个坏主意......
正如我所说,最好将其放在 /app/assets/javascripts
中。
关于javascript - 包括 Rails 中特定 View 的外部 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29062456/