使用 fog 上传到 S3 可以从本地主机进行,但不能使用 heroku
Uploading with fog to S3 works from localhost but not with heroku
使用carrierwave和fog gems上传图片到S3;当我从 localhost:3000 执行时,它工作得很好。但是在部署到 heroku 之后,当我尝试上传图像时,我得到了 "something went wrong" 屏幕。如果我创建了相同的 post 而没有尝试上传图像,其他一切 post 都很好。
同样,在本地,当我上传图像时,它会直接进入我在 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>"
我的 carrierwave.rb 中没有这一行(雾凭证所在的位置),尽管我认为没有必要:
config.cache_dir = "#{Rails.root}/tmp/uploads"
最终的问题是我从来没有在终端中 运行 一个关键的 figaro 命令来通知 heroku 我的 AWS 凭证。我已经以其他方式单独完成了,但显然这还不够好。我需要做的就是输入这个:
$ figaro heroku:set -e 生产
使用carrierwave和fog gems上传图片到S3;当我从 localhost:3000 执行时,它工作得很好。但是在部署到 heroku 之后,当我尝试上传图像时,我得到了 "something went wrong" 屏幕。如果我创建了相同的 post 而没有尝试上传图像,其他一切 post 都很好。
同样,在本地,当我上传图像时,它会直接进入我在 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>"
我的 carrierwave.rb 中没有这一行(雾凭证所在的位置),尽管我认为没有必要:
config.cache_dir = "#{Rails.root}/tmp/uploads"
最终的问题是我从来没有在终端中 运行 一个关键的 figaro 命令来通知 heroku 我的 AWS 凭证。我已经以其他方式单独完成了,但显然这还不够好。我需要做的就是输入这个:
$ figaro heroku:set -e 生产