Rails 3.1与application.html.erb中的javascript_include_tag有关

rya*_*yan 18 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我创建了一个简洁的Rails 3.1应用程序,名为demo1.它包含两个控制器 - 你好和再见.当我尝试加载http:// localhost:3000/say/hello时出现以下错误:

ActionView::Template::Error (
  (in /home/me/dev/ruby/demo1/app/assets/javascripts/say.js.coffee)):
    3: <head>
    4:   <title>Demo1</title>
    5:   <%= stylesheet_link_tag    "application" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8: </head>
    9: <body>
  app/views/layouts/application.html.erb:6:in     
`_app_views_layouts_application_html_erb___558576499_89622220'
Run Code Online (Sandbox Code Playgroud)

application.html.erb的问题在于:

<%= javascript_include_tag "application" %>
Run Code Online (Sandbox Code Playgroud)

当我使用Rails 3.0创建应用程序时,这个特定的行是:

<%= javascript_include_tag :defaults %>
Run Code Online (Sandbox Code Playgroud)

这很好用.事实上,当我将application.html.erb更改为使用时:defaults一切正常,但我想使用Rails 3.1的新功能.

我似乎无法在谷歌周围发现任何事情,我想因为Rails 3.1刚刚发布.

顺便说一下,我正在关注使用RailsAgile Web开发的第一章(第4版)更新为Rails 3.1书.

一些环境信息可能有助于回答这个问题:

$ cat /etc/issue
Ubuntu 10.04.2 LTS \n \l

$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

$ rails -v
Rails 3.1.0
Run Code Online (Sandbox Code Playgroud)

在内容say.js.coffee文件:

# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
Run Code Online (Sandbox Code Playgroud)

rya*_*yan 33

好的,我已经弄清楚问题是什么,所以我会回答我自己的问题.

问题是app/assets/javascripts/application.js文件包含注释掉的代码.但是,其中一条注释掉的内容如下:

//= require_tree .
Run Code Online (Sandbox Code Playgroud)

当我删除这一行时,一切正常.

希望这可以帮助.如果有人可以提供一些见解,说明为什么下划线导致问题会很棒.

  • 您在答案中输入的行实际上是正确的.这将包括文件夹assets/javascripts下的所有javascript文件.请参阅:http://guides.rubyonrails.org/asset_pipeline.html#manifest-files-and-directives.我今天早些时候创建的rails 3.1 app有这个,它工作正常.我还有两个空的coffeescript文件. (4认同)
  • 这样做可能会停止发生错误,但实际上并不是解决方案."注释掉"行实际上是资产管道的处理指令.我不确定你的问题究竟是什么,但也许同样的JS文件被包含两次? (4认同)
  • 我开始使用ROR并面临同样的问题,同样的解决方案也有效!但是,如果删除该行更可取,那么我仍然不会从讨论中得到什么呢?它是如何解决问题的呢? (2认同)

Con*_*ion 7

我刚开始使用新的RoR 3.2.1应用程序时遇到了这个问题.问题是你缺少一个JS运行时,这是因为该行

# gem 'therubyracer'
Run Code Online (Sandbox Code Playgroud)

你的Gemfile中有#在它前面.上帝只知道为什么他们发送Rails并注释该行,因为任何使用generate scaffold或类似的教程都会导致资产编译过程绊倒生成的coffeescript文件.

解决方案是取消注释该行.安装另一个JS运行时也可以解决问题.请参阅例如ExecJS,但找不到JavaScript运行时.

rails rails上官方红宝石说:

将CoffeeScript编译为JavaScript需要一个JavaScript运行时,缺少运行时会给你一个execjs错误.通常,Mac OS X和Windows都安装了JavaScript运行时.Rails在一个注释行中为新应用添加了therubyracer gem到Gemfile,如果需要,你可以取消注释.therubyrhino是JRuby用户的推荐运行时,默认情况下添加到JRuby下生成的应用程序中的Gemfile.您可以在ExecJS上调查所有支持的运行时.