【问题标题】:rails4: image_tag generates a 404 errorrails4: image_tag 生成 404 错误
【发布时间】:2014-06-12 13:56:03
【问题描述】:

在生产中,为 image_tag 帮助程序生成的 html 返回 404 错误。 资产管道已启用

在haml文件中

=image_tag "how_it_works_1.jpg"

how_it_works_1.jpg 文件位于 app/assets/images/how_it_works_1.jpg

当我使用 mina 在生产中部署时,我可以在 current/public/assets/how_it_works_1-5e40b2326fc14e879ae476a3fd6aef97.jpg 下找到此资产

但是生成的 html 并不指向这个资产,而是指向 /images/how_it_works_1.jpg ,它返回 404

<img src="/images/how_it_works_1.jpg"/>

它在开发环境下工作

<img src="/assets/how_it_works_1.jpg"/>

编辑: 我与乘客一起使用 apache2.4 这是我的production.rb的摘录:

config.serve_static_assets = false
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass
config.assets.compile = true
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
config.assets.digest = true
config.assets.version = '1.0'

【问题讨论】:

    标签: ruby-on-rails asset-pipeline


    【解决方案1】:

    你必须先运行它。我自己以前也遇到过这个问题。

    rake assets:precompile RAILS_ENV=production
    

    然后重新加载服务器。

    【讨论】:

    • 这就是解决方案。我很怀疑,因为 deploy.rb 脚本已经有一个预编译规则
    【解决方案2】:

    您的资产似乎已成功预编译。然而,Rails 默认拒绝在生产环境中提供静态资源。 This Rails guide 有更多信息。 (config.serve_static_assets 为 Ctrl-F)

    要回答您的问题,您需要配置您的网络服务器(是 Apache、nginx 还是其他什么?)以提供来自部署的 public/assets/ 目录的静态资产。

    如果您编辑您的问题以包含您的网络服务器,我可以为您提供指向更具体说明的链接。干杯!

    【讨论】:

    • 我正在使用 apache2.4 + 乘客。我编辑了问题
    • 好的,我想你会在你的 Apache 的配置文件中想要一个像 Alias /assets /path/to/currents/public/assets/ 这样的行。虽然回想起来我并不肯定这会有所帮助,因为it seems like Passenger should already serve static assets。或许您可以提供更多线索,比如 public/assets/ 目录的 Unix 文件权限?
    • 您是否尝试过我的预编译资产的答案?我认为问题不在于服务器,而在于正在生成的链接。
    • 嗯,很有趣。很高兴这有效,但我有点困惑,因为资产已经预编译 - 公共/资产文件夹中存在的摘要文件名证明了这一点。也许之前目录中没有manifest.json文件?奇怪...
    【解决方案3】:

    似乎config.assets.digest 在 config/environments/production.rb 中不是真的(默认情况下应该是真的)。

    【讨论】:

    • 它设置为 true - 我编辑了我的问题以添加 production.rb 的相关部分
    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2012-11-07
    • 2010-10-23
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多