我正在尝试编写一个辅助方法,可以从S3存储中下载CSV文件,读取文件的前几行,然后将前几行保存到新的本地文件中。
当我在rails控制台中包含帮助程序并调用对象上的方法时,一切正常,但是当通过控制器以完全相同的方式调用它时,本地文件包含S3文件中的所有行,而不仅仅是前几个。
我的代码,在帮助文件中(为了发布问题,我已将AWS凭据替换为注释):
def download_file(data_source)
s3 = Aws::S3::Client.new(#API keys etc.)
File.open(data_source.file.data['id'], 'wb') do |file|
reap = s3.get_object({ bucket:#Bucket Name, key: 'store/' + data_source.file.data['id'] }, target: file)
end
end
def reduce_csv(filename)
data = CSV.open(filename, 'r') { |csv| csv.first(3) }
csv_string = CSV.generate do |csv|
data.each do |d|
csv << d
end
end
File.open('test.csv', 'wb') do |file|
file << csv_string
end
end
def make_small_data_source(data_source)
download_file(data_source)
reduce_csv(data_source.file.data['id'])
end
在控制器中:
if @data_source.save
make_small_data_source(@data_source)
任何想法都会非常感激!