ruby-on-rails - 在 Amazon S3 carrierwave 上重新上传图片

标签 ruby-on-rails ruby ruby-on-rails-4 amazon-s3 carrierwave

我已将图像上传到 amazon s3 bucket。当我尝试 recreate_versions! 时,它给了我一个 nil body 异常。

我认为这是由于我们代码中之前的 uploader 设置发生了变化。但是,当我执行 pr.image.url 时,它仍然会给我原始图像,所以我尝试的如下:

begin 
    User.all.each do |pr|
        if pr.user.present?
           pr.remote_avatar_url = pr.avatar.url
           pr.save!
        end
    end
    rescue
end

但是它抛出一个错误:

ActiveRecord::RecordInvalid: Validation failed: Avatar trying to download a file which is not served over HTTP

我知道这是载波异常。我想做的是,我想重新上传所有图片(因为 pr.avatar.url 给我原始图片),但我不知道该怎么做。任何帮助将不胜感激。

最佳答案

你是correct试图将远程 URL 存储在名为 remote_avatar_url 的属性中。

CarrierWave 在尝试将无效 URL 保存到模型时抛出 Validation failed: ATTRIBUTE trying to download a file which is not served over HTTP 异常。更具体地说,CarrierWave::Uploader::Download 在下载的文件“scheme”属性与正则表达式/^https/不匹配时引发 CarrierWave::DownloadError URL 不以“https”开头)。可以查看这个逻辑here . (具体请参见第 31 和 69 行。)

我不确定这是否是问题所在,但您可以尝试检查 pr.avatar.url 以查看它是否以 https 前缀开头,然后再将其分配给 remote_avatar_url

我希望这至少能有所帮助。

关于ruby-on-rails - 在 Amazon S3 carrierwave 上重新上传图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40689658/

相关文章:

ruby-on-rails - 在 Rails 迁移中,是否可以指示新添加的列应该在表中的现有列之前还是之后?

ruby-on-rails - Rspec: nil.should_not be_nil 在我预期失败时通过。为什么?

ruby-on-rails - Rails 4 嵌套形式 "Unpermitted Parameters"在其他任何地方都没有回答

ruby-on-rails - 在 Ruby on Rails 3.1+ 中公开静态文件?

ruby-on-rails - 尝试加载 gem 'rmagick' 时出错。 ( bundler ::GemRequireError)

ruby-on-rails - 应用程序启动时运行的方法应该放在哪里?

ruby-on-rails - 运行 rake db :migrate 时,Rails 创建迁移以将列添加到表中会导致错误

ruby-on-rails - 机架安装应用程序与 sinatra 应用程序的 rails 安装

ruby-on-rails - rails 4 + 专家 : join model authorization in has_many :through association

ruby-on-rails - 带参数回调后的 aasm