Heroku 和预编译资产

Heroku and Precompiled Assets

我有一个 Rails 4 应用程序。我的一项 javascript 资产使用 ruby 获取所有用户。

当我尝试上传到 heroku 时出现问题。它说它无法预编译该资产,因为数据库尚不存在。除了删除该资产,上传到 heroku 以迁移数据库,然后再放回去,我还能做什么?

谢谢!

在本地编译资源

要解决部署中数据库的先有鸡还是先有蛋的问题,请不要在生产中调用预编译,在推送之前在开发机器上为生产预编译。推送功能代码库后,您可以在 Heroku 上执行 运行 "$heroku db:xxx" 命令。

  1. 关闭 production.rb 中的预编译资产:
config.assets.compile = false
  1. 在开发机器上用于生产的预编译资产:
$bundle exec rake assets:precompile RAILS_ENV=production
  1. 现在您的代码 glob 将包含您的预编译资产,所以推送它。
$heroku push

在部署到 Heroku 时,您正在寻找这一行:

    -----> Preparing Rails asset pipeline
           Detected manifest.yml, assuming assets were compiled locally
  1. 此时您可以在 Heroku 上创建生产数据库
$heroku db:migrate

我认为这些步骤可以解决您的问题。请告诉我。

警告

一旦禁用预编译,您将必须记住在部署到生产之前始终在开发系统上进行生产预编译。

Javascript 编译成资产管道

既然你专门说的是 js 预编译,我还没有试过这个,但如果你有这些类型的预编译 js 特定行,似乎也应该在 production.rb 中注释掉。 assets里面有同类型的js指令。 rb,我又不知道这些是否需要清除。 (重点是在推送到 Heroku 之前进行本地资产预编译。

  # Precompile additional assets.
  # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
  # config.assets.precompile += %w( xxxx.js )

Heroku 文档

https://devcenter.heroku.com/articles/rails-asset-pipeline#compiling-assets-locally