Ruby on rails Dokku手机上的回形针照片上传(S3)出错
更新 我用回形针创建了一个非常简单的应用程序,它有一个人物模型和头像附件。然后我将它部署到一个全新的Dokku droplet上,遇到了与我的主应用程序相同的问题。然后我阅读了有关ActiveStorage的文章,并认为也许我会在这方面取得一些成功,因此我将这个简单的应用程序转换为使用ActiveStorage而不是回形针,但在通过设备摄像头捕获的移动上传上,我仍然存在同样的问题 从我所看到的情况来看,这似乎是Dokku的一个问题(特别是在Heroku上运行该功能之后),但我真的不知道从这里可以走到哪里。我没有任何处理移动上传的特殊代码。我使用simple_form作为表单控件,使用标准image_标记语法进行显示。我还使用Desive for user accounts(我将其添加到我的简单应用程序中只是为了复制)。问题是,当我收到Dokku错误消息时,我的日志没有显示任何内容,就像请求从未从我的手机中发出一样 仍在寻求帮助,谢谢Ruby on rails Dokku手机上的回形针照片上传(S3)出错,ruby-on-rails,amazon-s3,paperclip,digital-ocean,dokku,Ruby On Rails,Amazon S3,Paperclip,Digital Ocean,Dokku,更新 我用回形针创建了一个非常简单的应用程序,它有一个人物模型和头像附件。然后我将它部署到一个全新的Dokku droplet上,遇到了与我的主应用程序相同的问题。然后我阅读了有关ActiveStorage的文章,并认为也许我会在这方面取得一些成功,因此我将这个简单的应用程序转换为使用ActiveStorage而不是回形针,但在通过设备摄像头捕获的移动上传上,我仍然存在同样的问题 从我所看到的情况来看,这似乎是Dokku的一个问题(特别是在Heroku上运行该功能之后),但我真的不知道从这里可以
我有一个应用程序,在我的模型上可以上传可选照片和PDF附件的回形针。除了在我的生产服务器上尝试在移动设备(iOS)上附加文件外,其他一切都可以正常工作 我使用Dokku(通过DigitalOcean)进行生产,使用Heroku进行测试。我使用AmazonS3存储上传的文件 有效:
- 开发:从PC上传工作(此处无法在移动设备上进行测试)
- 测试(Heroku):从PC和手机上传工作
- 制作(Dokku/DO):所有上传都可以从PC上完成。PDF上传可以从手机上完成。如果选择手机中已有的照片,则可通过手机上传照片
- 生产(Dokku/DO):从手机上传照片(使用内置的iOS/Safari拍照功能)转到Dokku上的错误页面。错误页面显示“无法提供您正在查找的页面。”
has_attached_file :attachment,
styles: { large: ["1000x1000>", :png], medium: ["300x300>", :png], thumb: ["100x100>", :png] }
validates_attachment_content_type :attachment,
content_type: [
"image/jpg",
"image/jpeg",
"image/png",
"image/gif",
"application/pdf",
"file/txt",
"text/plain",
"application/doc",
"application/msword",
"application/vnd.ms-excel",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
],
message: "Sorry! We do not accept the attached file type"
def transaction_params
params.require(:transaction).permit(:trx_date, :description, :amount, :trx_type, :memo, :attachment, :attachment_file_name)
end
# Paperclip settings
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
bucket: ENV['S3_BUCKET_NAME'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
s3_region: ENV['S3_REGION'],
s3_host_name: ENV['S3_HOST_NAME']
}
}
型号控制器.rb
has_attached_file :attachment,
styles: { large: ["1000x1000>", :png], medium: ["300x300>", :png], thumb: ["100x100>", :png] }
validates_attachment_content_type :attachment,
content_type: [
"image/jpg",
"image/jpeg",
"image/png",
"image/gif",
"application/pdf",
"file/txt",
"text/plain",
"application/doc",
"application/msword",
"application/vnd.ms-excel",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
],
message: "Sorry! We do not accept the attached file type"
def transaction_params
params.require(:transaction).permit(:trx_date, :description, :amount, :trx_type, :memo, :attachment, :attachment_file_name)
end
# Paperclip settings
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
bucket: ENV['S3_BUCKET_NAME'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
s3_region: ENV['S3_REGION'],
s3_host_name: ENV['S3_HOST_NAME']
}
}
config/environments/production.rb
has_attached_file :attachment,
styles: { large: ["1000x1000>", :png], medium: ["300x300>", :png], thumb: ["100x100>", :png] }
validates_attachment_content_type :attachment,
content_type: [
"image/jpg",
"image/jpeg",
"image/png",
"image/gif",
"application/pdf",
"file/txt",
"text/plain",
"application/doc",
"application/msword",
"application/vnd.ms-excel",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
],
message: "Sorry! We do not accept the attached file type"
def transaction_params
params.require(:transaction).permit(:trx_date, :description, :amount, :trx_type, :memo, :attachment, :attachment_file_name)
end
# Paperclip settings
config.paperclip_defaults = {
storage: :s3,
s3_credentials: {
bucket: ENV['S3_BUCKET_NAME'],
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
s3_region: ENV['S3_REGION'],
s3_host_name: ENV['S3_HOST_NAME']
}
}
输出“dokku配置myapp”
我通过安装Postman并使用代理服务器查看来自我手机的客户端请求的更多详细信息来确定错误原因。我发现服务器返回的错误413请求实体太大 经过一些搜索,我发现我需要通过在我的应用程序目录中添加文件来更新我的nginx配置
/home/dokku/<myapp>/nginx.conf.d/upload.conf
之后,我重新启动了dokku容器,现在一切正常:)
感谢所有人的帮助您说过您使用S3作为存储设备。当你在生产中通过移动应用程序上传图像时,图像是否会出现在S3上?不,它不会出现那么远。当我点击“提交”时,服务器端几乎什么也没发生。由于您的计算机站点在生产环境中工作,而移动站点在test/heroku上工作,这一定是dokker和ios/paperclip之间的冲突。您能否编写一些自定义代码,看看是否可以通过ios发送数据?我想问题可能在你的ios代码中。我建议你用回形针为dokker编写一个超级简单的应用程序,并尝试为ios部分编写一个简单的上传功能。这可能有助于确定问题/错误。@Prometheus请查看我原始问题中的更新。谢谢因为这是一个dokker的事情,所以尝试(如果您还没有)联系支持人员,在github回形针gem上创建一个票据,并在那里报告。这是一个更“特殊”的问题。你想用heroku来代替制作吗?还有其他一些选择。我知道这并不能解决你的问题,但它可能是目前唯一真正的“替代方案”。希望你能尽快修复它!