Ruby on rails Rails 3.1在application.html.erb中存在javascript_include_标记的问题

Ruby on rails Rails 3.1在application.html.erb中存在javascript_include_标记的问题,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,我创建了一个干净简单的Rails 3.1应用程序,名为demo1。它包含两个控制器-你好和再见。我尝试加载时出现以下错误: 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 CoffeeScr

我创建了一个干净简单的Rails 3.1应用程序,名为demo1。它包含两个控制器-你好和再见。我尝试加载时出现以下错误:

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/

好的,我已经弄明白了问题所在,所以我会回答我自己的问题

问题是app/assets/javascripts/application.js文件中包含注释掉的代码。然而,注释掉的行之一如下:

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


希望这有帮助。如果有人能提供一些关于下划线为什么会导致问题的见解,那就太好了。

另一件对我有用的事情是将json(也许还有yajl ruby)gem添加到gem文件中。我真的不明白为什么以前没有安装它们,因为:

rails依赖于actionpack 这取决于链轮 这取决于json和tilt

tilt取决于yajl ruby


然而,不知何故,似乎许多依赖的gem都没有安装

我在运行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'
这是在最初设置项目时,即使用“rails new myapp”时,放在我的Gemfile中的

请注意,在我的模板文件中,我包括:

<%= javascript_include_tag :application %>


希望这能有所帮助

我在启动新的RoR 3.2.1应用程序时遇到了这个问题。问题是您缺少一个JS运行时,这是因为

# gem 'therubyracer'
在你的档案里,前面有那个。上帝只知道为什么他们在发布Rails时会注释这一行,因为任何使用
generate scaffold
或类似内容的教程都会导致资产编译过程被生成的coffeescript文件绊倒

解决方法是取消对该行的注释。安装另一个JS运行时也可以解决这个问题。见例

报告说:

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

如果使用linux(像我一样的Ubuntu linux),请安装javascript运行时。最好是发出以下命令进行安装

apt-get-install-nodejs

或者,对于每个新创建的rails项目,添加


gem'therubyracer'到您的gemfile并运行bundle安装

如果您在Windows上使用RailsInstaller进行开发,则需要使用RailsInstaller附带的.bat文件来运行服务器。不幸的是,你也不能使用任何像conemu这样的CMD钩子来启动服务器。

为了未来谷歌的利益,我在安装therubyracer时遇到了麻烦,直到我偶然发现了这篇相关文章:

上面提到的链接解释了ExecJS在Windows 8开箱即用系统中的配置不正确。特别是,pottsk所描述的变通方法为我带来了好处

它涉及到在
%rubyinstall%\gems\2.0.0\gems\ExecJS-2.0.1\lib\ExecJS\runtimes.rb中更改ExecJS运行
cscript
可执行文件的方式:

# 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
)

不用说,这不是一个永久性的解决方案,但它确实可以让我启动并运行,直到补丁被合并。

只需从
application.js

/=需要TurboLink

/=require\u tree

devise_scope :user do
      get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
   end
如果您的routes.rb上面有这一行,只需删除它并运行。这就是纠正我问题的方法。

修改生成器文件(
application.html.erb.tt
),如下所示:

<%= javascript_include_tag "application", "data-turbolinks-track" true %>
<%= javascript_include_tag :default, "data-turbolinks-track" true %>

只需从生成器文件(application.html.erb)中删除以下行(第6行):

true%>
请更新我,如果有任何缺点,删除这一行


谢谢,我在Rails 4中遇到了这个问题,如果我将其切换为“默认值”而不是“应用程序”,它就会工作,正如OP所说的那样。但这是在一个外部的宝石,我不想编辑。我发现,如果我强制我的Gemfile使用1.8.0版的coffee脚本源代码,进行捆绑安装并启动服务器,那么一切都会正常工作。

删除
/=require\u tree
将阻止javascript文件加载到rails中。它可能会停止错误,但可能不是您想要的


然而,在我的例子中,我有一些缩进不正确的
.js.coffee
文件。一旦我解决了这个问题(通过删除它们),它就起作用了。

添加宝石“therubyracer”解决了这个问题。
我是在通过快速问题添加外部js文件后才发现错误的,运行bundle安装时,所有内容都正确安装了吗?我想知道exec.js是否出了什么问题是的,我重新运行了bundle安装,一切看起来都很好。。。有什么想法可以让我深入挖掘吗?试着看看你创建应用程序时的终端输出,看看是否有什么东西安装失败。我从测试版就开始使用rails 3.1了。按照书中的建议,我尝试从头开始创建演示应用程序,并创建了控制器。它像预期的那样工作。同样,我已经安装了execjs和coffee脚本。所以它只需要找到它并将它绑定到锁定的gemfile上。很好的建议。那么,您是在使用Rails 3.1之前安装了execjs和coffee脚本,还是在Rails 3.1中创建项目时安装的?它们是Rails 3.1的默认文件。因为我已经使用测试版好几个月了,我已经安装好了
# gem 'therubyracer'
# 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
)
devise_scope :user do
      get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
   end
<%= javascript_include_tag "application", "data-turbolinks-track" true %>
<%= javascript_include_tag :default, "data-turbolinks-track" true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>