0

我使用“Gruff”为我的数据库表绘制图表

此功能的最后一步是在文件夹中创建图像

bar_chart.write("/home/lawyer/Capistrano/current/app/assets/images/graph/lawfirm_#{@lawyer.id}.png")

并在显示页面中:它将使用此图像在某个 div 中显示

-if File.exists?("/home/lawyer/Capistrano/current/app/assets/images/graph/lawfirm_#    {@lawyer.id}.png")
= image_tag("graph/lawfirm_#{@lawyer.id}.png") 

它在我的本地主机中运行良好。但在生产中始终未显示图像。

在控制台日志中,它显示错误消息:

Started GET "/assets/graph/lawfirm_2673.png" for 217.86.186.128 at 2013-05-15 10:19:04 +0200
Served asset /graph/lawfirm_2673.png - 404 Not Found (3ms)

ActionController::RoutingError (No route matches [GET] "/assets/graph/lawfirm_2673.png"):

但有时它会起作用。它可以显示图像。

一开始画图的功能是在同一个控制器和同一个方法“索引”中,我希望先画图再显示图像。所以我补充说

before_filter :draw_graph

并在“draw_graph”方法中移动绘图函数

但仍然是同样的问题

4

2 回答 2

0

我认为这可能是因为您在应用程序中生成图像?如果您在应用程序中生成它们然后存储它们,那么如果您部署到 Heroku 等服务,它们将无法在生产中工作。您需要使用Amazon S3 之类的东西来保存生产中的图像。

这篇文章描述了一个类似的问题。

有一个 gem 可以安装 AWS 和像这样的不错的教程(使用回形针设置,但同样的原则适用)。

于 2013-05-15T10:03:20.857 回答
0

您正在将图像写入应用程序/资产;默认情况下,Rails 不会在生产环境中提供资产(参见config.assets.compile参考资料config/environments/production.rb)。

尝试将您的图像写入

bar_chart.write(File.join(Rails.root, "public", "system", "graph", "lawfirm_#{@lawyer.id}.png"))

并将您的 image_tag 更改为

image_tag("/system/graph/lawfirm_#{@lawyer.id}.png")

这会将您的动态图像写入public/system/文件夹。

于 2013-12-08T15:48:03.263 回答