Rails资产未正确编译

时间:2013-04-04 14:53:03

标签: ruby-on-rails asset-pipeline

我今天在Ruby on Rails上遇到了一个令人不安的问题。 我的资产没有被编译:我的意思是,即使使用资产:预编译,也不会编译它们。

我相信这会更好地说明问题。在预编译资产之后,这就是/public/assets/application.js的样子:

// This is a manifest file that'll be compiled into including all the files listed below.
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
// be included in the compiled file accessible from http://example.com/assets/application.js
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require twitter/bootstrap
//= require_tree .
;

同样适用于CSS。 该项目在其他计算机上运行正常,所以我怀疑我的配置有问题。但是什么可能导致这种问题呢?这并不像Rails不会尝试预编译,但当他到达文件时,他只是将它们复制到资产文件夹而不预先编译它们。

关于如何解决这个问题的任何线索?

编辑:添加资产输出:预编译

** Invoke assets:precompile (first_time)
** Execute assets:precompile
/home/plaristote/.rvm/rubies/ruby-2.0.0-p0/bin/ruby /home/plaristote/.rvm/gems/ruby-2.0.0-p0@visibleo_commApp/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace
** Invoke assets:precompile:all (first_time)
** Execute assets:precompile:all
** Invoke assets:precompile:primary (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:primary
/home/plaristote/.rvm/rubies/ruby-2.0.0-p0/bin/ruby /home/plaristote/.rvm/gems/ruby-2.0.0-p0@visibleo_commApp/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets --trace
** Invoke assets:precompile:nondigest (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:nondigest

2 个答案:

答案 0 :(得分:2)

检查config / enviroments / production.rb中是否包含此内容:

#禁用Rails的静态资产服务器(Apache或nginx已经这样做了)

config.serve_static_assets = false

#压缩JavaScripts和CSS

config.assets.compress = true

#如果遗漏了预编译资产,请不要回退到资产管道

config.assets.compile = false

#为资产网址生成摘要

config.assets.digest = true

答案 1 :(得分:0)

我遇到了同样的问题。在我看到这个问题之前,我最近将Ruby升级到2.0.0。通常,预编译需要几分钟,但是遇到这个问题,它只需要几秒钟就不会产生错误。

由于我使用RVM管理Ruby,我可以轻松切换回1.9.3并重新尝试预编译。当我重新尝试使用Ruby 1.9.3进行预编译时,我收到了有关丢失文件的错误,这些都与第三方gem CSS中的错误有关。在我手动修复后,预编译成功(使用1.9.3)。

但是,我没有尝试切换回Ruby 2.0.0并在修复错误后进行预编译 - 这是一个正在遭受停机的生产服务器,所以一旦我恢复活着,我就不能再浪费时间了。但我的理论是,如果我切换回2.0.0,预编译就会成功。我可能会在计划停机期间尝试确认这一点并更新此答案。

因此,似乎与Ruby 2.0.0之间存在某种关系,并且预编译任务没有显示错误。