当我尝试部署我的 rails 应用程序时,这里有啥问题?
Posted
技术标签:
【中文标题】当我尝试部署我的 rails 应用程序时,这里有啥问题?【英文标题】:What is the issue here when I try to deploy my rails app?当我尝试部署我的 rails 应用程序时,这里有什么问题? 【发布时间】:2016-01-17 05:36:35 【问题描述】:这是我使用“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】:Rails 的资产编译器(即 Sprockets)找不到该文件。当您删除 //= 时错误消失,因为它在编译资产时停止查找它。这意味着您最终会得到包含“require ...”行的实际 JavaScript,这是无效的 JavaScript,而不是您想要的(require=
是 Rails/Sprocket 的东西,而不是 JavaScript 的东西)。
要解决此问题,您需要将文件放在正确的位置。对于grayscale-sass这样的第三方库,标准的做法是拷贝到your-project/vendor/assets/…
。也就是说,有更好的方法可以将第三方前端项目引入 Rails。 Rails Assets 很适合这个。
【讨论】:
以上是关于当我尝试部署我的 rails 应用程序时,这里有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
部署时如何告诉 Rails 使用生产数据库(而不是开发数据库)?
使用Passenger和Apache在vps上部署我的rails应用程序
为啥我的 Rails 应用程序无法部署到 AWS Elastic Beanstalk?