我创建了一个简洁的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'
application.html.erb 的问题在于:
<%= javascript_include_tag "application" %>
当我使用Rails 3.0创建应用程序时,这个特定的行是:
<%= javascript_include_tag :defaults %>
这很好用。事实上,当我将application.html.erb更改为使用时:defaults一切正常,但我想使用Rails 3.1的新功能。
我似乎无法在谷歌周围发现任何事情,我想因为Rails 3.1刚刚发布。
顺便说一下,我正在关注Agile Web Development with Rails (4th edition) Updated for 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
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/
答案 0 :(得分:33)
好的,我已经弄明白问题是什么,所以我会回答我自己的问题。
问题是 app / assets / javascripts / application.js 文件包含注释掉的代码。但是,其中一条注释掉的内容如下:
//= require_tree .
当我删除此行时,一切正常。
希望这会有所帮助。如果有人能够提供一些见解,说明为什么下划线导致问题会很棒。
答案 1 :(得分:7)
我在启动新的RoR 3.2.1应用时遇到了这个问题。问题是你缺少一个JS运行时,这是因为行
# gem 'therubyracer'
你的Gemfile中的在它前面有#。上帝只知道他们为什么发布Rails并评论该行,因为任何使用generate scaffold
或类似的教程都会导致资产编译过程绊倒生成的coffeescript文件。
解决方案是取消注释该行。安装另一个JS运行时也可以解决问题。参见例如ExecJS and could not find a JavaScript runtime
official ruby on rails guide说:
将CoffeeScript编译为JavaScript需要一个JavaScript运行时,缺少运行时会给你一个execjs错误。通常,Mac OS X和Windows都安装了JavaScript运行时。 Rails在一个注释行中为新应用添加了therubyracer gem到Gemfile,如果需要,你可以取消注释。 therubyrhino是JRuby用户的推荐运行时,默认情况下添加到JRuby下生成的应用程序中的Gemfile。您可以在ExecJS上调查所有支持的运行时。
答案 2 :(得分:3)
只需从application.js
//= require turbolinks
//= require_tree
答案 3 :(得分:2)
我在运行rails 3.1.1时遇到了同样的问题
在我的Gemfile中恢复以下代码后,我的问题就消失了:
group :assets do
gem 'sass-rails', '~> 3.1.4'
gem 'coffee-rails', '~> 3.1.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
最初设置项目时,这是放在我的Gemfile中,即使用“rails new myapp”。
请注意,我的模板文件中包括:
<%= javascript_include_tag :application %>
希望有所帮助
答案 4 :(得分:2)
如果您使用的是Windows并且使用RailsInstaller来开发,那么您需要使用RailsInstaller附带的.bat文件来运行您的服务器。不幸的是,你也不能使用任何像conemu这样的CMD钩子来启动服务器。
答案 5 :(得分:2)
为了未来Google员工的利益,我在试图安装therubyracer
时陷入了一个兔子洞,直到我偶然发现这个相关帖子:
ExecJS::RuntimeError in rails 3.2.8 engine with javascript_include_tag
上面提到的链接解释说,对于Windows 8开箱即用,ExecJS配置不正确。特别是,pottsk描述的解决方法对我有用。
https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952
它涉及更改cscript
中ExecJS运行%rubyinstall%\gems\2.0.0\gems\execjs-2.0.1\lib\execjs\runtimes.rb
可执行文件的方式:
# JScript = ExternalRuntime.new(
# :name => "JScript",
# :command => "cscript //E:jscript //Nologo //U",
# :runner_path => ExecJS.root + "/support/jscript_runner.js",
# :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE
# )
JScript = ExternalRuntime.new(
:name => "JScript",
:command => "cscript //E:jscript //Nologo",
:runner_path => ExecJS.root + "/support/jscript_runner.js",
:encoding => 'UTF-8' # CScript with //U returns UTF-16LE
)
不言而喻,这不是一个永久的解决方案,但它确实让我开始运行,直到补丁被合并。
答案 6 :(得分:1)
删除//= require_tree
只会阻止您的javascript文件被加载到rails中。它可能会停止错误,但可能不是你想要的。
但是,在我的情况下,我有一些.js.coffee
个文件有不正确的缩进。一旦我解决了这个问题(通过删除它们),它就可以了。
答案 7 :(得分:0)
您可以尝试的另一件事对我来说是将json(也许还有yajl-ruby)gem添加到您的Gemfile中。我真的不明白为什么他们之前没有安装,因为:
rails取决于actionpack 这取决于链轮 这取决于json和倾斜
并且倾斜取决于yajl-ruby
然而,不知何故,似乎没有安装许多相关的宝石!?
答案 8 :(得分:0)
如果使用linux(像我的Ubuntu linux),请安装javascript运行时。最好的是发出以下命令来安装,
apt-get install nodejs
或者,对于每个新创建的rails项目,添加
gem'therubyracer'到你的gemfile并运行bundle install
答案 9 :(得分:0)
devise_scope :user do
get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
end
如果您的routes.rb上面有这行,只需将其删除并运行即可。这是纠正我的问题的原因。
答案 10 :(得分:0)
修改生成器文件(application.html.erb.tt
),如下所示:
<%= javascript_include_tag "application", "data-turbolinks-track" true %>
<%= javascript_include_tag :default, "data-turbolinks-track" true %>
答案 11 :(得分:0)
从生成器文件(application.html.erb)中删除以下行(第6行):
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
如果删除此行有任何缺陷,请更新我
由于
答案 12 :(得分:0)
我在Rails 4中遇到了这个问题,如果我将其切换为“默认值”而不是“应用程序”,它就会起作用,就像OP所说的那样。但这是一个我不想编辑的外部宝石。我发现如果我强制我的Gemfile使用版本1.8.0的coffee-script-source,进行捆绑安装,然后启动服务器,那么一切正常。
答案 13 :(得分:0)
添加宝石&#39; therubyracer&#39;解决了这个问题。 我通过&lt;%= javascript_include_tag%&gt;添加外部js文件后才收到错误