在 通过capistrano 进行发布程序到 nginx+passenger 生产环境后。
如果访问网站,出现错误。查询 production.log文件会发现 ActionView::Template::Error (congest_index/congest_index_of_net_for_date.css isn't precompiled):
说明 css 等文件没有预编译。
这是由于 在生产环境,出于效率的考虑把预先编译给关闭了
要解决这个问题。有2种方法
- 打开预编译开关(由于效率原因不推荐)
在config/environments/production.rb 文件里面 加入
config.assets.compile = true
并且把原来的 config.assets.compile = false 给屏蔽。
然后发布到svn 上,再通过capistranto 进行部署。
- 发布的时候进行编译。
如果在production上用pre compile的话,不是所有的css和js都会被预编译,拿css来说,他是根据application.css中的引用来判断,如果你的css没有被包含在application.css或者其中引用的css中,那么这个资源就会不被预编译,production上就会出错。
你需要在production.rb中指定需要预编译的资源,如下:
config.assets.precompile += %w( login.css controllers/*.js controllers/*.css lib/*.js lib/*.css common/*.js )