Rails公共文件夹项目在生产中不可用

Tyl*_*ler 13 favicon https ruby-on-rails ruby-on-rails-4

/public我的应用程序目录中的开发模式中有一些可以访问的项目:favicon.ico,robots.txt.

我可以在例如开发中查看这些localhost:3000/favicon.ico.但是,当我推进生产时,资产在这些路径上是不可见的.因此,我没有favicon图标,谷歌也无法找到我的robots.txt文件.

我该如何解决这个问题,以便/public通过相关网址访问该目录?

Kir*_*rat 14

在您的添加中添加以下行 app/config/environments/production.rb

config.serve_static_assets = true
Run Code Online (Sandbox Code Playgroud)

这是Rails指南所说的

config.serve_static_assets配置Rails本身以提供静态资产.默认为true,但在生产环境中关闭,因为用于运行应用程序的服务器软件(例如Nginx或Apache)应该为静态资产提供服务.与默认设置不同,在运行时(绝对不推荐!)或使用WEBrick在生产模式下测试应用程序时将此设置为true.否则,您将无法使用页面缓存,并且对公共目录下定期存在的文件的请求将无论如何都会打到您的Rails应用程序.

  • `rails_on_heroku`现已弃用.这是新的宝石:`rails_12factor` (3认同)
  • 谢谢你的提醒.我在Heroku上,这在早期的Rails 3中是不可能的.现在它实际上是可能的(根据Heroku"必需")并且它由`rails_on_heroku` gem启用.请参阅https://github.com/heroku/rails_on_heroku&https://devcenter.heroku.com/articles/ruby-support#rails-4-x-applications (2认同)

Sta*_*uro 13

Rails 5.1

在您的添加中添加以下行 app/config/environments/production.rb

config.public_file_server.enabled = true
Run Code Online (Sandbox Code Playgroud)

更新

config/environments/production.rb 包含这一行:

config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
Run Code Online (Sandbox Code Playgroud)

这意味着您可以RAILS_SERVE_STATIC_FILES在启动rails服务器时传入命令行,例如:

RAILS_ENV=production RAILS_SERVE_STATIC_FILES=yes rails s -b 0.0.0.0 -p 3000
Run Code Online (Sandbox Code Playgroud)

  • 我的 Puma 服务器只是在生产模式下提供空文件。此设置仅意味着它提供 200 状态而不是 404,但始终为空。还有其他人有这个问题吗? (2认同)