用户将文件上传到Heroku

时间:2012-08-21 23:08:01

标签: ruby-on-rails heroku nginx carrierwave

在我的应用中,用户可以上传他们的徽标以显示在他们的个人资料页面上(使用Carrierwave + s3)。

在我的本地应用中,图片路径为:https://s3.amazonaws.com/iemarkt/uploads/user/logo/squaredeye_336x336.jpg

但是在我的Heroku部署应用程序中,图像路径为“/ assets /”,这会导致错误并且不允许用户上传图像。

每当我尝试使用Carrierwave + s3在我的Heroku应用程序上传文件时,我会收到此错误“我们很抱歉,但出了点问题。”,查看我的日志时发现此错误:

    2012-08-20T21:18:56+00:00 app[web.1]: Started GET "/assets/" for 24.90.124.181 at 2012-08-20 21:18:56 +00002012-08-20T21:18:56+00:00 app[web.1]:2012-08-20T21:18:56+00:00 app[web.1]: ActionController::RoutingError (No route matches [GET] "/assets"):

我的store_dir

    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/"

我在我的production.rb中没有发现这一行(我读到Heroku使用的是Nginx,我不知道是否还需要做其他事情来让Nginx工作。)

  config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'

我真的不知道为什么路径不会导致我的s3帐户。

这是我的app

1 个答案:

答案 0 :(得分:1)

我只是尝试部署您的应用,它工作正常,看到我的用户上传了图片

http://young-reaches-9187.herokuapp.com/deals/1

我唯一改变的是载波设置,区域名称错误: 你试图使用该地区

'eu-east-1' 哪个不存在,所以我改为: 'us-east-1'

此处提供完整的地区列表:http://docs.amazonwebservices.com/general/latest/gr/rande.html

顺便说一下,您不应该在您的应用中编写您的AWS凭据。例如,我刚刚上传到您的存储桶,但我可以销毁您的文件。 您应该使用环境变量。

您还应该在.gitignore中添加database.yml。