我尝试部署rails应用程序时会出现什么问题?

时间:2015-10-19 00:24:27

标签: jquery ruby-on-rails heroku

这是我使用'rails s'

在本地部署时遇到的错误
couldn't find file 'grayscale-sass/assets/bower_components/jquery.easing/js/jquery.easing.js' with type 'application/javascript'
Extracted source (around line #20):
20 //= require grayscale-sass/assets/bower_components/jquery.easing/js/jquery.easing.js

这是我的application.js文件

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .


//= require grayscale-sass/assets/bower_components/jquery.easing    /js/jquery.easing.js


//= require grayscale-sass/assets/bower_components/bootstrap/dist/js/bootstrap.js
//= require grayscale-sass/assets/js/grayscale.js

但是,如果我进入我的application.js文件并删除require jquery前面的'// =',则错误消失,我的应用程序运行。但是,当我部署到heroku时,它会失败并出现错误,表示

ExecJS::ProgramError: Unexpected token: name (jquery) (line: 14, col: 8, pos: 586)

第14行将是我的application.js文件      需要jquery

1 个答案:

答案 0 :(得分:0)

Rails'资源编译器(即Sprockets)无法找到该文件。删除// =时,错误消失,因为它在编译资产时停止查找。这意味着您最终得到的实际JavaScript包含“require ...”行,这是无效的JavaScript而不是您想要的(require=是Rails / Sprocket的东西,而不是JavaScript的东西。)

要解决此问题,您需要将文件放在正确的位置。对于像grayscale-sass这样的第三方库,标准方法是将其复制到your-project/vendor/assets/…。也就是说,有更好的方法将第三方前端项目拉入Rails。 Rails Assets对此有好处。