当我尝试部署我的 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?

部署 Rails 应用程序时无法检测到 rake 任务

无法在 ElasticBeanstalk 上部署 Rails 5 VueJS 应用程序

Elastic Beanstalk Passenger-Standalone Rails 不提供静态资产