Rails Asset Pipeline 预编译,如何正确执行?

Posted

技术标签:

【中文标题】Rails Asset Pipeline 预编译,如何正确执行?【英文标题】:Rails Asset Pipeline precompile, how to do it the right way? 【发布时间】:2014-01-25 20:49:14 【问题描述】:

我是 Rails 4.0 的新手。当我推动 heroku Cedar 堆栈时,我不了解预编译过程。我这样做:

$> rake assests:precompile
$> git add .
$> git commit -m "foobar" && git push && git push heroku

似乎一切正常,但我的图像/css 似乎没有在 heroku 应用程序上“加载”(Chrome)(但在本地完美运行):

Failed to load resource: the server responded with a status of 404 (Not Found) http://xxxapp.herokuapp.com/stylesheets/bootstrap.min.css

我尝试了一些方法,但我听说这不是好的解决方案。我已修改config/environments/production.rb 文件并更改:

  config.assets.compile = false

  config.assets.compile = true

它工作正常,我所有的图像和 css 都已加载,但我想我错过了一些东西。


还有

我试过了:

$> rm -rf public/assets
$> git add .
$> git commit -m "foooo" && git push && git push heroku

预编译过程运行良好,但之后,我的应用程序上仍然没有加载图像和 css。


通过添加编辑我的 Gemfile 后:

group :production do
    gem 'rails_12factor'
end

图片加载良好,但没有 css..

【问题讨论】:

【参考方案1】:

Heroku 应该默认为你编译资源。

你不需要做任何其他事情。

如果您已经编译了资产,您可能希望将它们从公共目录中删除,然后再次推送到 heroku。

【讨论】:

我尝试删除 public/assets 目录然后推送到 heroku,但我的页面缺少图像/css...不知道为什么。仍然“加载资源失败:服务器响应状态为 404(未找到)xxx.herokuapp.com/stylesheets/bootstrap.min.css” 您是否重置了以下行:config.assets.compile = false 您是否在更改 gemfile 后运行了包更新? 是的,我做到了。顺便说一句,这个问题已经“解决”了,因为我从头开始了一个新教程并且它可以工作。【参考方案2】:

您应该在 heroku 上进行预编译,而不是在您的计算机上。

heroku run rake assets:precompile

我不知道,如果这是问题,我在一年前就这样做了。

【讨论】:

以上是关于Rails Asset Pipeline 预编译,如何正确执行?的主要内容,如果未能解决你的问题,请参考以下文章

即使在 config/initializers/assets.rb 中声明,Sprockets Rails Helper Asset 也未预编译

markdown Rails Asset Pipeline:`require`指令

asset_sync Gem 导致 Heroku 挂起预编译

在asset_pipeline中包含来自rails应用程序之外的资产

禁用 Asset Pipeline/Sprockets Rails 4.1

Rails 预编译供应商/资产