是否可以跳过 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.yml
和 git 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 的资产预编译步骤?的主要内容,如果未能解决你的问题,请参考以下文章
Django Heroku 应用程序移至新计算机 - git push heroku master 上的错误
将具有 node_modules 的本地 Node.js 项目 Git 存储库推送到 Heroku 时,本地 node_modules 是不是会覆盖 Heroku 上的那些?