1

我正在使用 ruby​​ 脚本生成要上传到 s3 的 html 页面。我的亚马逊存储桶配置为静态网站,我的脚本生成的 html 页面是索引页面。

我创建了几个模型来使用雾 gem 建立与 s3 的连接,生成 html 页面,然后将其推送到 s3。

当我使用脚本将文件推送到 s3 时,我没有收到任何错误,但只有一半的文件被上传。无论文件大小如何,它都会发生。我不可避免地会从我生成的 html 表中丢失大约 15 行。

我的 FogManager 模型中的相关代码是这样的:

def connect
  @connection = Fog::Storage.new({
    provider:              'AWS',
    aws_access_key_id:     AWS_ACCESS_KEY,
    aws_secret_access_key: AWS_SECRET_KEY,
    persistent:            true
  })
end

def locate_directory
  @directory = @connection.directories.get(DIRECTORY)
end

def upload_report_page(index_file)
  file = @directory.files.get(index_file)
  file.body = File.open(index_file)
  file.acl = 'public-read'
  file.save
end

我的脚本看起来像:

filename = "index.html"

s3 = FogManager.new
s3.connect
s3.locate_directory

# code for generating the html page

s3.upload_report_page(filename)

所有代码都有效,但整个 html 文件没有上传到 s3。

我正在使用最新版本的雾 (1.15.0) 和 ruby​​ 2.0.0p0

我已经能够手动进入 irb 并建立一个 s3 连接,找到文件,然后上传新的。我使用这些命令:

require 'fog'

connection = Fog:Storage({provider: 'AWS', 
                          aws_access_key_id: 'xxx', 
                          aws_secret_access_key: 'xxx',
                          persistent: true})

directory = connection.directories.get('my_directory')

file = directory.files.get('index.html')
file.body = File.open('index.html')
file.acl = 'public-read'
file.save

当我以这种方式上传文件时,它可以正常工作,并且整个文件都被上传,但它违背了拥有脚本的目的。

任何见解将不胜感激!

4

0 回答 0