【问题标题】:Uploading with fog to S3 works from localhost but not with heroku使用雾上传到 S3 可以从 localhost 但不能使用 heroku
【发布时间】:2017-06-28 10:25:39
【问题描述】:

使用carrierwave和fog gems将图像上传到S3;当我从 localhost:3000 执行此操作时,它工作得很好。但是在部署到 heroku 之后,当我尝试上传图像时,我得到了“出现问题”屏幕。如果我创建相同的帖子而不尝试上传图片,则其他所有帖子都可以正常发布。

同样,在本地,当我上传图片时,它会直接进入我在 S3 中的存储桶。为什么当我从 heroku 执行相同的操作时不会发生相同的事情??

我已经完成了所有的迁移和推送,我什至尝试添加了fog-aws gem(尽管aws 不是问题,heroku 是)。请帮忙! :(

products_controller.rb

  def update
    @product.category_id = params[:category_id]

    respond_to do |format|
      if @product.update(product_params)
        format.html { redirect_to @product, notice: 'Product was successfully updated.' }
        format.json { render :show, status: :ok, location: @product }
      else
        format.html { render :edit }
        format.json { render json: @product.errors, status: :unprocessable_entity }
      end
    end
  end

这里是 heroku 日志,只有错误。

2017-02-10T06:21:48.471592+00:00 app[web.1]: I, [2017-02-10T06:21:48.471528 #4]  INFO -- : [4cc29852-5ad1-446c-8589-4d67bb97f2cc] Completed 500 Internal Server Error in 614ms (ActiveRecord: 9.3ms)
2017-02-10T06:21:48.472558+00:00 app[web.1]: F, [2017-02-10T06:21:48.472497 #4] FATAL -- : [4cc29852-5ad1-446c-8589-4d67bb97f2cc] Excon::Error::Forbidden (Expected(200) <=> Actual(403 Forbidden)
2017-02-10T06:21:48.472560+00:00 app[web.1]: excon.error.response
2017-02-10T06:21:48.472562+00:00 app[web.1]:   :body          => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AllAccessDisabled</Code><Message>All access to this object has been disabled</Message><RequestId>EB063C36E37005DB</RequestId><HostId>6J4nl+P2RoUKEg1D23Fb3dxokR0I5piyBK3/3wYVRmyGzyFxzFseVmTUoZ6GpMFMUiEVQSH2GVA=</HostId></Error>"

【问题讨论】:

  • 顺便说一句,我会熬夜并积极检查这个,所以如果有代码我应该发布,请告诉我
  • 能否请您检查heroku日志并发布错误
  • 能否请您在app/controllers/products_controller.rb 中发布update 操作的代码
  • 您可以尝试更改用户策略。尝试授予 AmazonS3FullAccess 以测试它是否有效。

标签: ruby-on-rails heroku amazon-s3 upload fog


【解决方案1】:

我的carrierwave.rb(雾凭证所在的位置)中没有这一行,尽管我认为没有必要:

config.cache_dir = "#{Rails.root}/tmp/uploads"

最终的问题是我从来没有在终端中运行过一个关键的 figaro 命令来通知 heroku 我的 AWS 凭证。我以其他方式单独完成了该操作,但显然这还不够好。我需要做的就是输入这个:

$ figaro heroku:set -e 生产

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2021-11-23
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    相关资源
    最近更新 更多