【问题标题】:Error with Paperclip Photo uploads (S3) on Mobile in Dokku在 Dokku 的移动设备上上传回形针照片 (S3) 时出错
【发布时间】:2018-10-29 20:19:17
【问题描述】:

更新

我使用带有人物模型和头像附件的回形针创建了一个非常简单的应用程序。然后我将它部署到一个全新的 Dokku droplet 并遇到了与我的主应用程序相同的问题。然后,我阅读了有关 ActiveStorage 的信息,并认为也许我会看到一些成功,因此我将简单的应用程序转换为使用 ActiveStorage 而不是 Paperclip,但在从设备摄像头捕获的移动上传上我仍然遇到同样的问题。

从我所看到的情况来看,这似乎是 Dokku 的一个问题(特别是因为该功能适用​​于 Heroku),但我真的不知道从哪里开始。我没有任何用于处理移动上传的特殊代码。我将 simple_form 用于表单控件,并使用标准 image_tag 语法进行显示。我还将设计用于用户帐户(我将其添加到我的简单应用程序中也只是为了复制)。问题是当我收到 Dokku 错误消息时,我的日志什么也没有显示,就好像该请求永远不会从我的手机中发出。

还在寻求帮助,谢谢!


我有一个应用程序为我的模型上的可选照片和 PDF 附件启用了回形针上传。尝试在移动设备 (iOS) 上附加文件时,除了在我的生产服务器中,一切都运行良好。

我使用 Dokku(通过 DigitalOcean)进行生产,使用 Heroku 进行测试。我正在使用 Amazon S3 存储文件上传。

作品:

  • 开发:从 PC 上传作品(此处无法在移动设备上进行测试)
  • 测试 (Heroku):从 PC 和移动设备上传作品
  • 生产(Dokku/DO):所有上传都可以从 PC 上运行。 PDF 上传可通过移动设备进行。如果选择手机中已有的照片,则可以通过手机上传照片。

不起作用:

  • 生产 (Dokku/DO):从移动设备上传照片(使用内置的 iOS/Safari 拍照功能)转到 Dokku 上的错误页面。错误页面显示“无法提供您要查找的页面。”

当我从 Dokku 检查应用程序日志时,我没有看到任何错误。当我尝试从移动设备上传时,我启用了实时模式日志(dokku 日志应用程序 -t)进行监控,一旦我单击提交按钮,日志没有报告任何内容,它只是转到我设备上的错误页面。

我认为这是我的 Dokku/部署配置的问题,因为它在 Heroku 中运行良好。我可能在 Dokku 方面遗漏了一些东西。因为我使用的是免费层,所以我没有在 Heroku 上启用 HTTPS,但我确实通过 LetsEncrypt 在 Dokku 上启用了 HTTPS。我不确定这是否是错误的原因。

无论如何,这是我的应用程序中的一些相关代码。任何想法都非常感谢!

模型.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"

model_controller.rb

    def transaction_params
        params.require(:transaction).permit(:trx_date, :description, :amount, :trx_type, :memo, :attachment, :attachment_file_name)
    end

config/environments/production.rb

  # 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 config myapp”的输出

AWS_SECRET_ACCESS_KEY:    **masked**
S3_BUCKET_NAME:           mybucketname
DOKKU_APP_RESTORE:        1
DOKKU_NGINX_SSL_PORT:     443
S3_REGION:                us-east-2
AWS_ACCESS_KEY_ID:        **masked**
DOKKU_APP_TYPE:           herokuish
DOKKU_NGINX_PORT:         80
DOKKU_PROXY_PORT_MAP:     http:80:5000 https:443:5000
DATABASE_URL:             **masked**
DOKKU_LETSENCRYPT_EMAIL:  **masked**
S3_HOST_NAME:             s3.us-east-2.amazonaws.com

【问题讨论】:

  • 您说您使用 S3 作为存储。当您通过移动应用在生产环境中上传图片时,图片是否会出现在 S3 上?
  • 不,它并没有那么远。当我点击“提交”时,服务器端几乎没有任何反应。
  • 既然你的电脑站点工作在生产环境,移动站点工作在test/heroku,那肯定是dokker和ios/回形针有冲突。您能否编写一些自定义代码,看看您是否可以通过 ios 槽生产发送任何数据?我认为问题可能出在您的 ios 代码中。我建议你用回形针为dokker编写一个超级简单的应用程序,并尝试为ios部分编写一个简单的函数来上传一些东西。这可能有助于确定问题/错误。
  • @Prometheus 请查看我原始问题中的更新。谢谢!
  • 因为它是一个 dokker 的事情,请尝试(如果您还没有)联系支持人员,在 github 回形针 gem 上创建一个工单并在那里报告。这是一个更“特殊”的问题。你想用 heroku 代替生产吗?还有一些其他的选择。我知道这不能解决您的问题,但它可能是目前唯一真正的“替代方案”。希望你能尽快解决!

标签: ruby-on-rails amazon-s3 paperclip digital-ocean dokku


【解决方案1】:

我通过安装 Postman 并使用代理服务器查看有关来自我的手机的客户端请求的更多详细信息来确定错误原因。我发现服务器返回错误 413 Request Entity Too Large。

经过一番搜索,我发现我需要通过在我的应用目录中添加文件来更新我的 nginx 配置

/home/dokku/<myapp>/nginx.conf.d/upload.conf

在那个文件中我插入了一行:

client_max_body_size 50M;

之后我重新启动了我的 dokku 容器,现在一切正常 :)

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 2016-01-20
    • 2010-12-10
    • 1970-01-01
    • 2011-01-03
    • 2013-09-09
    • 2014-08-19
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多