我的Rails Javascript清单文件既不编译也不包含任何必需的文件



我看过一些类似的帖子,但没有解决方案,所以我想我应该提出一个更有文档的问题。

我的问题 JS从manifest文件不包含或编译任何JS.

当我在本地运行服务器时,打开JS文件,我看到没有编译,只有标准的application.js manifest文件:

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// 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 underscore
//= require backbone
//= require backbone_rails_sync
//= require backbone_datalink
//= require backbone/myapp
//= require_tree .

我的发展。rb:

MyApp::Application.configure do
  config.cache_classes = false  
  config.whiny_nils = true
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false
  config.action_mailer.raise_delivery_errors = false
  config.active_support.deprecation = :log
  config.action_dispatch.best_standards_support = :builtin
  config.active_record.mass_assignment_sanitizer = :strict
  config.active_record.auto_explain_threshold_in_seconds = 0.5
  config.assets.compress = false
  config.assets.debug = true
end

我的应用程序。rb:

require File.expand_path('../boot', __FILE__)
require 'rails/all'
if defined?(Bundler)
  Bundler.require(*Rails.groups(:assets => %w(development test)))
end
module MyApp
  class Application < Rails::Application
    config.encoding = "utf-8"
    config.filter_parameters += [:password]
    config.active_support.escape_html_entities_in_json = true
    config.active_record.whitelist_attributes = true
    config.assets.enabled = true
    config.assets.version = '1.0'
  end
end

My Log:

Started GET "/questions" for 127.0.0.1 at 2013-04-04 08:56:09 -0400
Processing by QuestionsController#index as HTML
Completed 200 OK in 204ms (Views: 16.0ms | ActiveRecord: 17.4ms)
Started GET "/assets/application.css" for 127.0.0.1 at 2013-04-04 08:56:09 -0400
Served asset /application.css - 304 Not Modified (2ms)
Started GET "/assets/application.js" for 127.0.0.1 at 2013-04-04 08:56:09 -0400
Served asset /application.js - 304 Not Modified (0ms)
Started GET "/assets/favicon.png" for 127.0.0.1 at 2013-04-04 08:56:09 -0400
Served asset /favicon.png - 304 Not Modified (0ms)

要注意,这个应用程序是从另一个应用程序中挑选出来的,因为我从MongoDB构建迁移到Postgres构建。所以我认为这很可能与uncherrypick 的一些细节有关。

这个问题可以通过执行…来重现。

  1. $ rvm use ruby-2.0.0-p0
  2. $ rails new project
  3. /assets/javascripts/
  4. 创建一个包含alert('hey')的javascript文件
  5. $ rails s

我认为这个问题是因为Ruby 2还不能与Rails一起工作:(


我已经正式确定这是Ruby 2与Rails 3.2.6不兼容

Rajesh的解决方案对我来说也很有效。我使用的是2.0.0-p195和rake资产:在生产中预编译并没有真正读取application.js,我最终得到了1kb大小的文件application-###.js。

所以我回到了ruby 1.9.3,更新了包,通过 手动清除缓存
rm -rf tmp/cache/assets/*
rm -rf tmp/cache/sass/*

然后

在application.js中,我有

//= require jquery
//= require bootstrap
//= require_tree .

注意,我没有使用jquery-ui或jquery_ujs

然后我跑了

rake RAILS_ENV=production RAILS_GROUP=assets assets:clean
rake RAILS_ENV=production RAILS_GROUP=assets assets:precompile

我也遇到过同样的问题,花了很长时间才找到解决办法。

我只是切换回ruby-1.9.3-p429,它解决了这个问题。我不知道如何管理它与ruby 2 patches。我已经使用了ruby-2.0.0-p247ruby-2.0.0-p195

所以,只要做rvm use ruby-1.9.3-p429。然后运行'bundle update'。然后通过在控制台中运行Rails.cache.clear来清除Rails缓存,也不要忘记清除浏览器缓存。

希望一切顺利。:) - - - - - -

最新更新