在将Rails应用程序推送到Heroku之前要遵循哪些步骤?

时间:2015-01-26 12:33:49

标签: ruby-on-rails heroku

我有一个非常简单的应用程序,几乎没有Ruby代码,没有数据库,只有一个页面,包含html,css,jquery和简单的联系表单。尽管如此,像往常一样,推向Heroku只是一个婊子。每当我试图推动时,它似乎是随机的。首先我得到了一个错误。然后样式表没有被包括在内。然后图像和Fontawesome。现在这两个都在工作,但没有任何Javascript / jQuery。

在推送之前我需要执行哪些实际步骤,因为这是一个废话。我基本上只是随机运行预编译,然后再次尝试上传,每次上传不同的内容。

有趣的是,当我运行RAILS_ENV=production bundle exec rake assets:precompile时,我得到了与第一次尝试推送到Heroku时相同的错误(但是当我推送时我不会再出现错误):

rake aborted!
ExecJS::ProgramError: Name expected (line: 15546, col: 4, pos: 453566)

Error
at new JS_Parse_Error (/tmp/execjs20150126-3561-i1rcaljs:2359:10623)
at js_error (/tmp/execjs20150126-3561-i1rcaljs:2359:10842)
at croak (/tmp/execjs20150126-3561-i1rcaljs:2359:19086)
at as_symbol (/tmp/execjs20150126-3561-i1rcaljs:2359:29188)
at vardefs (/tmp/execjs20150126-3561-i1rcaljs:2359:25758)
at var_ (/tmp/execjs20150126-3561-i1rcaljs:2359:25996)
at /tmp/execjs20150126-3561-i1rcaljs:2359:21785
at /tmp/execjs20150126-3561-i1rcaljs:2359:19957
at block_ (/tmp/execjs20150126-3561-i1rcaljs:2359:24599)
at ctor.body (/tmp/execjs20150126-3561-i1rcaljs:2359:24233)
(in /home/my_name/Desktop/rails/bsun/app/assets/javascripts/application.js)/home/my_name/.rvm/gems/ruby-2.2.0/gems/execjs-2.2.2/lib/execjs/external_runtime.rb:64:in `extract_result'

那我该如何解决呢?第15546行是什么?

自从我第一次尝试推送尝试失败后,我就不得不进行故障排除和添加:

  1. 尽管没有数据库,但仍在生产中添加gem 'pg'
  2. 在production.rb。
  3. 中添加了config.assets.compile = trueconfig.serve_static_assets = true
  4. 跑了rake assets:precompile十几次。
  5. RAILS_ENV=production bundle exec rake assets:precompile失败。
  6. 将简单页面推送到Heroku还需要做些什么?

    编辑:下面的答案很棒,我只是想我会添加一些细节,以防任何人像我一样不熟练并遇到类似的问题。

    1. 让Heroku处理所有预编译是一个很好的提示。不要触摸有关处理静态资产或生产中的任何内容的设置。无论有多少人在SO上的各种其他线程中提出建议。我的意思是,我确信这对某些事情以及那些知道自己在做什么的人都有好处,但是听那些人让我陷入了很多麻烦。如果您遵循他们的建议,则在部署时必须遵循完全不同的步骤。

    2. 如果您收到类似我的错误(ExecJS :: ProgramError:Name),您可以忽略它后面的内容,只需在浏览器中打开页面上的Javascript控制台(Chrome的Ctrl-Shift-J)并检查如果它返回任何错误。在我的情况下,它确实如此,但即使它没有逐块删除Javascript代码然后运行RAILS_ENV =生产包exec rake资产:本地预编译是一种很好的排除故障的方法。我有一个逗号而不是分号,它以某种方式使代码在浏览器中工作但在控制台中以及在预编译时抛出错误。此外,不要忘记在预编译或运行RAILS_ENV =生产包exec rake资产之前恢复到:在部署到Heroku之前清理。

    3. 我通过将scss语法更改为background:image-url('name-of-img.png')来修复我的背景图像没有显示出来的背景:url('name-of-img')和不知何故,神奇地,它起作用了。

    4. 呼!

1 个答案:

答案 0 :(得分:0)

首先,我说你可能不需要使用rails,你可能会使用静态网站,可以使用jekyll之类的工具创建

如果你确实想使用rails和heroku,那么Heroku需要一些东西(如果缺少它们,它会注入你的应用程序)。文档说明你需要将你的应用程序配置为使用postgreSQL,所以我想你需要postgres gem。

要提供静态资源,只需添加12factor gem:gem 'rails_12factor', group: :production即可。

通过这种方式,您可以删除config.serve_static_assets配置选项,但事情应该有效。

资产管道和Heroku一直是许多人混淆的根源,我发现最简单的方法就是让Heroku为您修复资产编译 。所以不要先在本地运行rake assets:precompile,只需让Heroku处理(当你将代码推送到他们的存储库时,他们会将其作为部署的一部分)。因此,请设置config.assets.compile = false

我还建议按照docs中列出的步骤使用rails和雪松堆栈。

首先,使用Heroku命令行客户端(heroku create)创建您的Heroku应用程序,然后运行git push heroku master,您就可以了。