图片未从 public/asset 上传到页面,导致 Rails 通过 Carrierwave 出现连接错误
Image is not uploading from public/asset to the page, giving connection error in Rails via Carrierwave
我在从本地作为 env=production 或在 heroku 中上传图像时遇到问题。我花了两天时间寻找解决方案,但我找不到任何解决方案。
当我想在生产模式下本地添加图像时,它出现在 public 文件夹中但无法使用。
我正在通过 'carrierwave' gem 上传图片。
我也下载了 'figaro' 和 'fog-aws'。
除了从本地上传用户头像图像外,一切正常。
您可以从这里查看我正在尝试完成的申请:https://young-atoll-50498.herokuapp.com/?locale=en
*您应该先注册才能尝试上传图片。
这是我的头像上传器:
class AvatarUploader < CarrierWave::Uploader::Base
storage :file
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def default_url(*args)
model.name ||= ''
case
when ( model.name.empty? ) then ActionController::Base.helpers.asset_path("cat")
when ( model.name[0].downcase < 'h') then ActionController::Base.helpers.asset_path("cat")
when ( model.name[0].downcase < 'n') then ActionController::Base.helpers.asset_path("octahedron")
when ( model.name[0].downcase < 'u') then ActionController::Base.helpers.asset_path("pyramid")
else ActionController::Base.helpers.asset_path("happy_cone")
end
end
end
我的 user.rb
中有 mount_uploader
mount_uploader :avatar, AvatarUploader
这是用户控制器#update
def update
respond_to do |format|
if @user.update(edit_user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
else
format.html { render :edit }
end
end
end
private
def edit_user_params
params.require(:user).permit(:email, :name, :avatar_url, :role, :avatar)
end
我在生产模式下遇到这个错误:
excon.error.response
:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>4ADD67E52EF3DB0B</RequestId><HostId>6AELpBiQhDEsHwWU2usKMrg0kvF5ZG/XqXhNLzteahK1Ajyqk1Irru35xAetrKKbmIlMsOjGEp0=</HostId></Error>"
:cookies => [
]
:headers => {
"Connection" => "close"
"Content-Type" => "application/xml"
"Date" => "Tue, 17 Nov 2020 15:06:44 GMT"
"Server" => "AmazonS3"
"x-amz-id-2" => "6AELpBiQhDEsHwWU2usKMrg0kvF5ZG/XqXhNLzteahK1Ajyqk1Irru35xAetrKKbmIlMsOjGEp0="
"x-amz-request-id" => "4ADD67E52EF3DB0B"
}
:host => "extensionschool-p4.s3.amazonaws.com"
:local_address => "192.168.1.20"
:local_port => 57691
:path => "/uploads/user/avatar/1/ProfilePhoto.png"
:port => 443
:reason_phrase => "Forbidden"
:remote_ip => "52.217.1.188"
:status => 403
:status_line => "HTTP/1.1 403 Forbidden\r\n"
):
F, [2020-11-17T16:06:45.498764 #19316] FATAL -- : [dae587c2-d7cd-41cd-b5b7-202052fcd4b1]
F, [2020-11-17T16:06:45.498795 #19316] FATAL -- : [dae587c2-d7cd-41cd-b5b7-202052fcd4b1] app/controllers/users_controller.rb:38:in `block in update'
[dae587c2-d7cd-41cd-b5b7-202052fcd4b1] app/controllers/users_controller.rb:37:in `update'
我已经找到了问题,并想写下解决方案,以供将来可能遇到相同问题的人...
我按照以下文章的说明进行操作,因为我的课程推荐了一篇文章:https://blog.thefirehoseproject.com/posts/switching-carrierwave-to-use-s3-with-heroku-and-localhost/
*但这已经很老了!
我收到关于连接到 S3server 的错误。在安排“权限”时,在为 Amazon IAM 仪表板创建用户时,您应该首先创建三个 'off',最后一个 'on'。所以,你可以上传图片了。
阻止所有 public 访问 -> 关闭
- 阻止 public 访问通过新访问控制列表 (ACL) 授予的存储桶和对象:关闭
- 阻止 public 访问通过任何访问控制列表 (ACL) 授予的存储桶和对象:关闭
- 阻止 public 访问通过新 public 存储桶或访问点策略授予的存储桶和对象:关闭
- 通过任何 public 存储桶或访问点策略阻止 public 和跨账户访问存储桶和对象:开启
编码愉快!
我在从本地作为 env=production 或在 heroku 中上传图像时遇到问题。我花了两天时间寻找解决方案,但我找不到任何解决方案。
当我想在生产模式下本地添加图像时,它出现在 public 文件夹中但无法使用。
我正在通过 'carrierwave' gem 上传图片。 我也下载了 'figaro' 和 'fog-aws'。 除了从本地上传用户头像图像外,一切正常。 您可以从这里查看我正在尝试完成的申请:https://young-atoll-50498.herokuapp.com/?locale=en *您应该先注册才能尝试上传图片。
这是我的头像上传器:
class AvatarUploader < CarrierWave::Uploader::Base
storage :file
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def default_url(*args)
model.name ||= ''
case
when ( model.name.empty? ) then ActionController::Base.helpers.asset_path("cat")
when ( model.name[0].downcase < 'h') then ActionController::Base.helpers.asset_path("cat")
when ( model.name[0].downcase < 'n') then ActionController::Base.helpers.asset_path("octahedron")
when ( model.name[0].downcase < 'u') then ActionController::Base.helpers.asset_path("pyramid")
else ActionController::Base.helpers.asset_path("happy_cone")
end
end
end
我的 user.rb
中有 mount_uploadermount_uploader :avatar, AvatarUploader
这是用户控制器#update
def update
respond_to do |format|
if @user.update(edit_user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
else
format.html { render :edit }
end
end
end
private
def edit_user_params
params.require(:user).permit(:email, :name, :avatar_url, :role, :avatar)
end
我在生产模式下遇到这个错误:
excon.error.response
:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>4ADD67E52EF3DB0B</RequestId><HostId>6AELpBiQhDEsHwWU2usKMrg0kvF5ZG/XqXhNLzteahK1Ajyqk1Irru35xAetrKKbmIlMsOjGEp0=</HostId></Error>"
:cookies => [
]
:headers => {
"Connection" => "close"
"Content-Type" => "application/xml"
"Date" => "Tue, 17 Nov 2020 15:06:44 GMT"
"Server" => "AmazonS3"
"x-amz-id-2" => "6AELpBiQhDEsHwWU2usKMrg0kvF5ZG/XqXhNLzteahK1Ajyqk1Irru35xAetrKKbmIlMsOjGEp0="
"x-amz-request-id" => "4ADD67E52EF3DB0B"
}
:host => "extensionschool-p4.s3.amazonaws.com"
:local_address => "192.168.1.20"
:local_port => 57691
:path => "/uploads/user/avatar/1/ProfilePhoto.png"
:port => 443
:reason_phrase => "Forbidden"
:remote_ip => "52.217.1.188"
:status => 403
:status_line => "HTTP/1.1 403 Forbidden\r\n"
):
F, [2020-11-17T16:06:45.498764 #19316] FATAL -- : [dae587c2-d7cd-41cd-b5b7-202052fcd4b1]
F, [2020-11-17T16:06:45.498795 #19316] FATAL -- : [dae587c2-d7cd-41cd-b5b7-202052fcd4b1] app/controllers/users_controller.rb:38:in `block in update'
[dae587c2-d7cd-41cd-b5b7-202052fcd4b1] app/controllers/users_controller.rb:37:in `update'
我已经找到了问题,并想写下解决方案,以供将来可能遇到相同问题的人...
我按照以下文章的说明进行操作,因为我的课程推荐了一篇文章:https://blog.thefirehoseproject.com/posts/switching-carrierwave-to-use-s3-with-heroku-and-localhost/
*但这已经很老了!
我收到关于连接到 S3server 的错误。在安排“权限”时,在为 Amazon IAM 仪表板创建用户时,您应该首先创建三个 'off',最后一个 'on'。所以,你可以上传图片了。
阻止所有 public 访问 -> 关闭
- 阻止 public 访问通过新访问控制列表 (ACL) 授予的存储桶和对象:关闭
- 阻止 public 访问通过任何访问控制列表 (ACL) 授予的存储桶和对象:关闭
- 阻止 public 访问通过新 public 存储桶或访问点策略授予的存储桶和对象:关闭
- 通过任何 public 存储桶或访问点策略阻止 public 和跨账户访问存储桶和对象:开启
编码愉快!