【问题标题】:rails 4 enabled rails to serve static assets: is it correct? (on heroku)rails 4 启用 rails 来服务静态资产:是否正确? (在heroku上)
【发布时间】:2013-07-07 05:00:18
【问题描述】:

环境:heroku

导轨:4

红宝石:2

我们向 heroku 部署了一个应用程序,似乎公共文件夹中的任何内容都无法访问(没有看到静态文件,因此路由器启动,然后抱怨没有路由匹配)。

为了解决这个问题,我们设置

# Rails 4 only flag
config.serve_static_assets = true

在我们的 production.rb 文件中。这真的是处理这个问题的最好方法吗?还是我们未能正确配置应用程序如何正确托管在 heroku 上?

【问题讨论】:

  • 让 CDN 供应商来托管/为您提供静态资产是个好主意,或者 AWS S3 可能是另一种选择。 devcenter.heroku.com/articles/s3
  • 我会在本地预编译资产并将其上传到 as3 存储桶吗?此外,当它编译资产时,它看起来好像是在末尾放置某种散列值(假设有助于缓存杀戮)。有没有办法处理这个问题,所以我不必手动更新静态引用,因为我真的很喜欢说 stylesheet_link_tag “应用程序”的便利,而现在我想我必须手动设置它以指向适当的 css 文件在桶内?
  • 看看这个。 devcenter.heroku.com/articles/cdn-asset-host-rails31 看起来asset_sync 可以帮助您完成上传工作。我想说的是,最好不要(或可能永远不要)让您的 rails 进程为您提供静态内容,因此 rails 默认将 serve_static_assets 设置为 false 是有原因的。
  • 这是伟大的院长,你能创造一个答案让我接受吗?
  • Dean,我使用了该链接中提出的解决方案,效果很好。

标签: ruby-on-rails heroku ruby-on-rails-4


【解决方案1】:

在以前的 Rails 版本中,Heroku 注入了一个启用静态资源服务的插件,所以这个问题不存在。由于这个插件系统在 Rails 4 中被删除,他们现在创建了一个可以做同样事情的 gem。您可以通过以下方式在 Gemfile 中启用它:

gem 'rails_12factor', group: :production

Getting Started with Rails 4.x on Heroku

您当然也可以为您的资产使用 CDN,但不是必须的。

For Rails 5+ work on twelve-factor platforms out of the box and the gem is no longer required

【讨论】:

    【解决方案2】:

    导轨错误。试试……

    config.assets.serve_static_files = true
    

    【讨论】:

      【解决方案3】:

      这在 Rails 4.2 中已被弃用,现在它是一个计划在 Rails 5.0 中删除的别名

      config.serve_static_assets = true
      

      应该改为:

      config.serve_static_files = true
      

      【讨论】:

      • 在 Rails 5.1 中:config.serve_static_files` is deprecated and will be removed in Rails 5.1. Please use `config.public_file_server.enabled
      • xD 这就是为什么他们说开发人员最困难的两个任务是,1.变量命名和 2.缓存失效
      【解决方案4】:

      正如 Dean Winchester 所说,为静态资产使用 CDN 是个好主意。事实上,当仅使用 Heroku 时,您的 Rails 应用程序必须负责提供静态资源,因为 Heroku Cedar 架构不会为您这样做。

      如果您不想配置 CDN 并仅使用 Heroku,则可以设置 config.serve_static_assets = true

      【讨论】:

      • 注意。如果您的 Heroku 应用程序是 CDN 的源(例如,使用 CloudFront,如下所述:devcenter.heroku.com/articles/…),您可能仍需要拥有 config.serve_static_assets = true,以便源可以为缓存未命中提供服务。
      • config.serve_static_assets = true 是做什么的?我什至无法从文档中理解它。
      • 您好,谢谢您的回答,设置config.serve_static_assets = true 不会影响您的rails 应用程序的性能吗?
      猜你喜欢
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 2018-12-07
      • 1970-01-01
      相关资源
      最近更新 更多