使用Rails 4资源管道时未找到预编译CSS文件

10

我正在学习Rails,已经有一个在dev(webrick)上运行的应用程序。

问题是:预编译的CSS文件在生产环境中找不到。

现在我将它托管在Heroku上并进行部署。我收到一条消息说资产已经预编译(所以这不是编译错误),一切都是默认设置。

我列出了 /public/assets 文件夹中的所有内容。我甚至可以使用 cat 命令查看 application-*.css 文件,并得到应有的全部内容。

但是当我尝试访问 CSS 文件时,会给我返回 404 错误页面(即使它是使用 <%= stylesheet_link_tag "application", :media => "all" %> 自动生成的 CSS 链接)。因此,肯定不是我硬编码 CSS 链接的问题。

我不确定下一个检查应该是什么。

如果你想查看输出,现在可以在这里公开访问:链接

2个回答

14
尝试在您的config/environments/production.rb中更改配置选项config.serve_static_assets=falseconfig.serve_static_assets=true,如果您还没有这样做。

好像这个方法行得通。现在我只需要弄清楚图片的问题了。 - Erick
@Erick,这个配置也应该处理图片。你能在 public/assets/ 目录中看到这些图片吗?顺便问一下,你是如何引用这些图片的?是使用 image_path 助手吗? - vee
我必须承认,我以硬编码的方式引用它们,路径为/assets/something.jpg。我将尝试使用image_path助手程序,然后再看看。 - Erick
@Erick,是的,请继续。那应该解决了图像问题。 - vee
与sass mixin image-url完美配合。谢谢! - Erick
2
Rails 4.2有config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?。对于Heroku,我只需要heroku config:set RAILS_SERVE_STATIC_FILES=true就可以让它工作。 - Ghoti

1
在Rails 4中,唯一解决这个问题的方法是:
config.assets.compile = true

config/environments/production.rb文件中,如果预编译的资源丢失,将会回退到资产管道,根据文档说明。


文档还强烈建议在生产环境中永远不要将其设置为true,仅仅为了使应用程序工作。>< - bkunzi01
@bkunzi01 理论上,文档是正确的。不过在实践中,这只会被编译一次,所以我可以冒这个险 =) - Abdo
很酷,但是如何在部署后只强制编译一次呢?如果允许这样做,我的应用程序性能会受到影响。:( - bkunzi01

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接