是否可以跳过 Heroku 上的单个 git push 的资产预编译步骤?

Posted

技术标签:

【中文标题】是否可以跳过 Heroku 上的单个 git push 的资产预编译步骤?【英文标题】:Is it possible to skip the asset precompile step for a single git push on Heroku? 【发布时间】:2012-07-22 00:35:03 【问题描述】:

每次我将 Rails 3.2 项目部署到 Heroku 时,rake assets:precompile 都会运行:

$ git push heroku master  
...
----> Preparing app for Rails asset pipeline
      Running: rake assets:precompile
      Asset precompilation completed (189.17s)
...

有时我想做一个我知道不会改变任何资产的推送,例如对控制器的快速修补程序。是否可以跳过 assets:precompile 步骤以将单个 git push 到 Heroku?

谢谢。

【问题讨论】:

【参考方案1】:

当然!您需要在your_app/pubilc/assets 目录中创建一个manifest.yml

文件可以是空白的。但理想情况下,您在本地预编译所有内容,因此部署到 Heroku 会更快。

确保您在推送到 Heroku 时也提交了 manifest.yml 文件。 git add -f your_app/pubilc/assets/manifest.ymlgit push heroku master 之类的就足够了。

【讨论】:

如果我大多数时候仍然希望资产在 Heroku 上编译,这个解决方案意味着我必须对 manifest.yml 文件进行一次签入,推送到 heroku,然后绝对确保删除该文件。对?有没有什么方法不涉及这个额外的步骤? 如果您在部署到 Heroku 时仔细观察,会发现一行代码类似于 detected manifest.yml. Assuming assets compiled locally。所以本质上,清单文件是一个信号,告诉 Heroku 不要执行资产编译。我认为您始终可以在控制台上手动运行heroku run rake assets:precompile 从控制台运行 heroku run rake assets:precompile不会为正在运行的 Heroku dyno 预编译资产。 Heroku 上运行的每个进程都运行在不同的虚拟环境中。 嗨@BenjaminManns,这是 Heroku 必须说的:devcenter.heroku.com/articles/rails-asset-pipeline。特别是,“您可以通过两种方式在 Heroku 上使用资产管道。在本地编译资产。在 slug 编译期间编译资产。” @BenjaminTan,对,但是运行 CLI 命令不会做任何事情,因为它不在 slug 编译期间,并且它没有添加到 git 索引中。【参考方案2】:

这对我有用。 manifest.yml 在我的 rails 4 项目中对我没有任何帮助。

https://gist.github.com/Geesu/d0b58488cfae51f361c6

【讨论】:

但这不会导致无法进行预编译吗?【参考方案3】:

只需使用rake assets: precompile 在本地预编译,签入public/assets 中的结果资产,然后推送到heroku。

这将自动在您的public/assets 目录中创建manifest-.yml 或json 文件;然后 heroku 将检测到并报告Detected manifest file, assuming assets were compiled locally

注 1:有些人在development.rb 中有一行,这使得这些转到public/dev-assets instead;如果是这样,您需要将 dev-assets 重命名为 assets)

注意 2:确保您的 .gitignore 文件不排除 public/assets 目录。

【讨论】:

【参考方案4】:

在 rails 4 中,创建文件 manifest-<md5 hash>.json 而不是 manifest.yml

【讨论】:

以上是关于是否可以跳过 Heroku 上的单个 git push 的资产预编译步骤?的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上的 NPM 私有 git 模块

Django Heroku 应用程序移至新计算机 - git push heroku master 上的错误

忽略或跳过 Git 上的某些提交 [重复]

在 Heroku 上清理 git repo

将具有 node_modules 的本地 Node.js 项目 Git 存储库推送到 Heroku 时,本地 node_modules 是不是会覆盖 Heroku 上的那些?

heroku Pusher 附加组件上的“连接数”意味着多少