合并Ruby脚本

时间:2012-04-03 13:36:47

标签: ruby

我正在将内容上传到托管的CMS。他们提供了一个Ruby Gem,允许我以编程方式上传大量内容。我能够通过编辑他们的一个脚本来上传我的内容,但我无法让脚本在上传中包含我的文件。这是我成功使用的脚本:

#!/usr/bin/env ruby -rubygems
require File.join(File.dirname(__FILE__), 'authentication')
require "csv" # faster_csv (ruby 1.9)

lines = CSV.read(File.join(File.dirname(__FILE__), 'karaoke.csv')) # Exported an Excel file as CSV
lines.slice!(0) # remove header line
collection = StorageRoom::Collection.find('my collection ID')
Song = collection.entry_class
lines.each do |row|
 karaoke = Song.new(:artist => row[0], :song => row[1], :genre => row[2])
  if karaoke.save
    puts "Misuero Karaoke Latino saved: #{karaoke.artist}, #{karaoke.song}, #{karaoke.genre} "
  else
    puts "Misuero Karaoke Latino could not be saved: #{karaoke.errors.join(', ')}"
  end
end

根据他们的示例,这是执行文件上传的脚本:

#!/usr/bin/env ruby -rubygems
require File.join(File.dirname(__FILE__), 'authentication')

path = ::File.expand_path(File.join(File.dirname(__FILE__) + '..', 'spec', 'fixtures', 'image.png'))
collection = StorageRoom::Collection.find('my collection ID')

# Upload File
entry = collection.entry_class.new(:name => "StorageRoom Logo", :file => StorageRoom::File.new_with_filename(path))

if entry.save 
  puts "Entry saved (#{entry[:@url]})"
  puts "URL of the uploaded file is #{entry.image.url}"
  puts "URL of the automatically generated thumbnail is #{entry.image.url(:thumbnail)}" # Multiple Image Versions can be specified in the interface
else
  puts "Entry could not be saved: #{entry.errors.join(', ')}"
end

我想混合两个脚本,所以我只运行一个,但我无法让文件上传部分工作。我正在尝试上传.mov。文件应该在哪里与脚本相关?我怎样才能使它们被正确命名?如何编辑脚本以便它执行多个文件?我该如何合并脚本?

1 个答案:

答案 0 :(得分:3)

  

文件应该在哪里与脚本相关?

File.dirname(__FILE__)返回当前文件的目录,File.join允许您将其他目录添加到路径('..'当然是指父目录),File.expand_path确保这是一条绝对而非相对的道路。

  

如何才能正确命名?

如果不知道你的目录结构,基本上不可能回答这个问题。感受一下尝试使用ruby控制台并尝试使用the core file methods

  

如何编辑脚本以便它执行多个文件?

您可能希望将# Upload File下方的部分循环到文件名数组上。您可能会发现Dir.entries / Dir.glob对于生成此数组非常有用:Dir api docs

  

我该如何合并脚本?

一般来说:连接文件然后删除重复(例如,身份验证,分配集合var)。您的具体实现将取决于Song类的结构(例如,如果这是对象,您将文件附加到您可能只需将:file => StorageRoom::File.new_with_filename(path)添加到第一个脚本中的new语句)和/或csv (例如,如果这包含文件的路径,您可以通过它而不用摆弄Dir.glob等。