2012-04-03 15 views
1

Ich lade Inhalte auf ein gehostetes CMS hoch. Sie bieten einen Ruby-Edelstein, mit dem ich viele Inhalte programmatisch hochladen kann. Ich konnte meine Inhalte hochladen, indem ich eines ihrer Skripte bearbeitete, aber ich konnte das Skript nicht dazu bringen, meine Datei mit dem Upload zu versehen. Dies ist das Skript, das ich erfolgreich bin mit:Ruby-Skripts zusammenfügen

#!/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 

Dies ist das Skript, wie pro ihrem Beispiel, das würde den Datei-Upload tun:

#!/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 

Ich mag beide Skripte mischen, damit ich nur laufen eine, aber ich kann nicht den Datei-Upload-Teil überhaupt funktionieren. Ich versuche ein .mov hochzuladen. Wo sollten die Dateien in Bezug auf das Skript stehen? Wie kann ich es so machen, dass sie richtig benannt werden? Wie würde ich das Skript so bearbeiten, dass es mehrere Dateien enthält? Und wie kann ich die Skripte zusammenführen?

Antwort

3

Wo sollten die Dateien in Bezug auf das Skript stehen?

File.dirname(__FILE__) das Verzeichnis der aktuellen Datei zurückgibt und File.join können Sie andere Verzeichnisse auf den Pfad hinzuzufügen ('..' natürlich bedeutet, übergeordnetes Verzeichnis) und File.expand_path stellt sicher, dass dies eine absolute ist eher als relativer Pfad.

Wie kann ich es so machen, dass sie richtig benannt werden?

Es ist im Grunde unmöglich, dies zu beantworten, ohne Ihre Verzeichnisstruktur zu kennen. Um ein Gefühl dafür zu bekommen, versuchen Sie es mit der Ruby-Konsole und experimentieren Sie mit the core file methods.

Wie würde ich das Skript bearbeiten, so dass es mehrere Dateien tut?

Wahrscheinlich wollen Sie den Abschnitt unterhalb von # Upload File über ein Array von Dateinamen schleifen. Sie könnten Dir.entries/Dir.glob nützlich finden, um dieses Array zu generieren: Dir api docs.

Und wie kann ich die Skripte zusammenführen?

Im Allgemeinen: Dateien verketten dann entfernen Sie die Duplizierung (z. B. Authentifizierung, Zuordnung der Sammlung var). Ihre spezifische Implementierung hängt von der Struktur der Song-Klasse ab (zB wenn dieses Objekt Ihnen Dateien anhängen wird, können Sie einfach :file => StorageRoom::File.new_with_filename(path) zu der new-Anweisung in Ihrem ersten Skript hinzufügen) und/oder csv (zB wenn der Pfad von Die Datei enthalten können Sie einfach passieren, ohne mit Dir.glob usw.

+0

Sweet. Was bedeutet die Spezifikation Fixtures Teil? – hanleyhansen

+0

Ich versuchte dies http://pastebin.com/Rb3Asm2v, aber ich bekomme einen Fehler, der sagt: import_csv.rb: 22: Syntaxfehler, unerwartetes Keyword_end, erwartet ')' Keine Ahnung, was das bedeutet. – hanleyhansen

+1

'your_rails_root/spec/fixtures/image.png' ist ein Beispielbild, das zum Testen verwendet wird. Sieht aus, als hätten Sie einen Tippfehler in Zeile 15, was bedeutet, dass Ihre Dateinamenszeichenfolge nicht geschlossen ist. Probieren Sie '... StorageRoom :: File.new_with_filename (" # {karaoke.artist} # {karaoke.song} .mov "))'. – RobinGower

Verwandte Themen