Rails 3.1 - Coffescript不能编译为js

时间:2012-11-20 12:12:16

标签: jquery ruby-on-rails ruby-on-rails-3.1 coffeescript

我正在将应用程序从Rails 3.0迁移到Rails 3.1。我更改了所有nessasary配置文件并安装了gem(在Ryan's screencast的帮助下)。我有几个布局,我想为它们加载不同的脚本。

我有看法:

布局/ console.html.erb

<html lang="ru">
  <head>
    ...
    <%= stylesheet_link_tag "console" %>
    <%= yield :stylesheets%>
    <%= javascript_include_tag 'console' %>
    ...
    <%= yield :javascripts%>
  </head>
</html>

在我的资产中,我创建了文件console.js:

资产/ Javascript角/ console.js

// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require_self
//= require_tree ./console

我还创建了文件夹 console ,其中包含此文件夹中的文件:

资产/ Javascript角/控制台/ users.js.coffee

jQuery ->
  alert "Test"

但是当我加载这样的页面警报时不会出现。

当我调试页面时,我看到Rails加载了这个

<script type="text/javascript" src="/assets/console.js?body=1"></script>

其中包含:

// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
; 

而且:

<script type="text/javascript" src="/assets/console/users.js.coffee ?body=1"></script>

其中包含:

jQuery ->
alert "Test"
; 

我的问题是什么?我该如何解决这个问题?

UPD :页面顶部的链接:

<head>
   ...
   <meta charset="utf-8">
   <meta name="csrf-param" content="authenticity_token">
   <meta name="csrf-token" content="PAO2QZ6Z3ykmksXnY55dmCehq+i2COXmSlnZWjErFwA=">
   <link type="image/vnd.microsoft.icon" rel="shortcut icon" href="/favicon.ico">
   <link type="text/css" rel="stylesheet" media="screen" href="/assets/console.css?body=1">
   <link type="text/css" rel="stylesheet" media="screen" href="/assets/console/console.css?body=1">
   <link type="text/css" rel="stylesheet" media="screen" href="/assets/console/pagination.css?body=1">
   <link type="text/css" rel="stylesheet" media="screen" href="/assets/console/search-form.css?body=1">

   <script type="text/javascript" src="/assets/jquery.js?body=1"></script>
   <script type="text/javascript" src="/assets/jquery_ujs.js?body=1"></script>
   <script type="text/javascript" src="/assets/console.js?body=1"></script>
   <script type="text/javascript" src="/assets/console/users.js.coffee ?body=1"></script>  
</head>

2 个答案:

答案 0 :(得分:2)

更新答案:

行内有空格

<script type="text/javascript" src="/assets/console/users.js.coffee ?body=1"></script>

那不应该在那里!

确保文件名users.js.coffee中没有任何尾随空格。

原始答案:(不是解决方案)

它看起来不像coffeescript解释了这一行

jQuery ->

你正确加载jQuery吗?确保你有

gem 'jquery-rails'
Gemfile 中的

,您已经运行bundle install

也许值得尝试$ ->的替代语法,尽管它不应该有所作为。

答案 1 :(得分:0)

在Rails 3.1上运行时,Rails 3.0应用程序可能会丢失一些代码。

首先,检查你的Gemfile中是否有这些宝石:

group :assets do
  gem 'jquery-rails'
  gem 'jquery-ui-rails'
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

其次,检查这些行是否在config / application.rb中:

module SAH2Client
 class Application < Rails::Application

    ......

    # Enable the asset pipeline
    config.assets.enabled = true

    # Version of your assets, change this if you want to expire all your assets
    config.assets.version = '1.0'
  end

end