【问题标题】:Impossible to serve generated images without restarting app with Rails + Passenger?不使用 Rails + Passenger 重新启动应用程序就无法提供生成的图像?
【发布时间】:2016-10-17 21:51:17
【问题描述】:

我有用户生成并写入public/designer/designer_output 文件夹的图像。

在config/environments/production.rb我有

config.serve_static_files = true
config.assets.compile = true

在config/initializers/assets.rb我有

Rails.application.config.assets.paths << Rails.root.join('public', 'designer', 'designer_output')

但我无法通过请求 /assets/file_name 或 /public/designer/designer_output/file_name 来访问这些文件

如果我重新启动服务器,则文件只能通过 /assets/ 路径访问。但我需要它们在创建后立即可用,而无需重新启动。

如果我觉得奇怪的是我根本无法通过公用文件夹访问它们。

这是在带有 Apache/Passenger 的 Rails 4.2.6 上

我还有carrierwave作为上传gem,它将文件存储在public/uploads文件夹中,效果很好。

【问题讨论】:

  • 嗨 - 您能否编辑您的问题并添加您访问图像的实际代码(而不仅仅是描述您使用的路径)...有时错误可能在于您尝试的方式访问它 - 在我们看到之前我们无法知道:)
  • 我通过这些路径直接访问它们。即使我在那方面有错误,直接请求也应该显示资产。相反,我得到一个 404。另外,重新启动服务器使图像显示,因此路径很好。

标签: ruby-on-rails apache ruby-on-rails-4 asset-pipeline passenger


【解决方案1】:

public 文件夹用作 Rails 服务器的 Web 根目录。 您需要在路径或 URL 中删除public:

<!-- file is at /public/foo/bar.png --!>
<img src="/foo/bar.png" />

【讨论】:

  • 您不应该将 Rails 资产管道或资产助手用于用户生成的文件——这不是它的用途。资产管道用于开发人员生成的内容,例如 CSS 中使用的图像或视图引用的图像。
  • 这就是为什么它需要重新启动 - 资产意味着在您部署应用程序时进行静态编译。
  • 是的,但这就是公用文件夹的用途,对吧?为什么我在公共文件夹中根本无法访问它们?
  • 该死,对不起,我准备好你的答案有点快,还以为你说的是​​添加“公共”而不是删除它。现在可以了,非常感谢!
  • 当你说我不应该为此使用资产管道时,这究竟是什么意思?我应该从资产中删除这些路径吗?
猜你喜欢
  • 2015-12-08
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多