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

Posted

技术标签:

【中文标题】我的 Rails Javascript 清单文件既不编译也不包含任何必需的文件【英文标题】:My Rails Javascript manifest file neither compiles nor include any required files 【发布时间】:2013-04-04 12:57:38 【问题描述】:

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

我的问题清单文件中的 JS 不包含或编译任何 JS。

在本地运行我的服务器并打开 JS 文件时,我没有看到任何编译的内容,只是标准的 application.js 清单文件:

// 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

我的日志:

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 构建时,这个应用是从另一个应用中挑选出来的。所以我认为这很可能与一些未挑选的细节有关。

这个问题可以通过 .. 重现。

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

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


我已将其正式确定为 Ruby 2 与 Rails 3.2.6 不兼容

【问题讨论】:

application.js 文件的截断部分是什么? 愚蠢的问题,但是您在 gemfile 中有一个资产部分,其中包含 sass-rails、jquery-rails 和 jquery-ui-rails?我想知道查找依赖项时是否失败。虽然,服务器不会以清单中的那些和未安装的 gem 启动。 我的资产组中确实有这些宝石。我还尝试了该资产组之外的 jquery-rails 和骨干网,它适用于一个单独的项目。 【参考方案1】:

Rajesh 的解决方案也对我有用。 我使用的是 2.0.0-p195 和 rake assets:precompile on production 并没有真正读取 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 的解决方案,但对于那些使用 Rails 5 的人来说这是不可能的,因为它需要 Ruby 2.2.2。【参考方案2】:

我遇到了同样的问题,花了很长时间才找到解决方案。

我刚刚切换回ruby-1.9.3-p429,它解决了问题。我不知道如何使用ruby 2 patches 来管理它。我用过ruby-2.0.0-p247ruby-2.0.0-p195

所以,只需 rvm use ruby-1.9.3-p429。然后运行“捆绑更新”。然后通过在控制台中运行Rails.cache.clear 清除 Rails 缓存,同时不要忘记清除浏览器缓存。

希望一切顺利。 :)-

【讨论】:

以上是关于我的 Rails Javascript 清单文件既不编译也不包含任何必需的文件的主要内容,如果未能解决你的问题,请参考以下文章

从 Rails 资产管道中清除缓存

Rails - 将视图的 javascript 代码移动到 javascript 文件

rails4 rake assets 在生产环境中预编译生成错误的javascript文件

Rails 3.1 资产预编译 - 包括所有 javascript 文件

Rails 动态 javascript 加载

如何使用 Rails 代码/将变量传递给 .coffee javascript 文件?