Dateien auf Amazon S3 speichern

Amazon Simple Storage Service (Amazon S3) ist eine günstige möglichkeit Dateien in (fast) beliegiger Größe zu speichern. Im heutigen Script-Tip wollen wir zeigen wie einfach es ist Daten auf S3 zu speichern.

Um nicht die ganze Funktionlität selber zu implementieren werden wir in dem Beispiel auf das Gem „aws-s3“ zurückgreifen. Um das folgende Beispiel auszuprobieren, wird ein S3-Account für den Dienst benötigt. Der Account kann bei Amazon unter http://aws.amazon.com/s3/ eingerichtet werden.

Installation von aws-s3:

[bash]
gem install aws-s3
[/bash]

Danach kann man ganz einfach seine Dateien auf S3 übertragen.

[ruby]
require ‚rubygems‘
require ‚aws/s3‘
include AWS
include S3

AWS::S3::Base.establish_connection!(
:access_key_id => ‚DIE_AMAZON_ACCESS_KEY_ID‘,
:secret_access_key => ‚DER_AMAZON_SECRET_KEY‘
)

S3Object.store(‚der/objekt/pfad/auf/amazon/test.jpg‘, open(‚test.jpg‘),
‚der.bucket.name‘, :access => :public_read)
[/ruby]

Amazon S3 lässt ich auch für z.B. für Backups verwenden. Das wäre dann aber ein anderer Script-Tip… 🙂

Betriebssystem herausfinden

Hin und wieder ist es erforderlich das Betriebssystem, auf dem die Applikation gerade ausgeführt wird, herauszufinden. Oft wird hierzu die „RUBY_PLATFORM“ dazu benutzt. Wie das folgende Beispiel zeigt, kann dies zu einem „falschen“ Ergenis führen.

RUBY_PLATFORM gibt z.B. bei der Verwendung von JRuby den Wert „java“ zurück. Das spiegelt nicht das Betriebssystem wieder, sondern die verwendete Engine unter der die Applikation läuft.

Ein Beispiel-Modul um das Betriebssystem herauszufinden wäre:

[ruby]
module Betriebssystem
def macintosh?
RUBY_PLATFORM.downcase.include?("darwin")
end

def windows?
RUBY_PLATFORM.downcase.include?("mswin")
end

def linux?
RUBY_PLATFORM.downcase.include?("linux")
end
end
[/ruby]

Um einen verlässlichen Wert zu bekommen, sollte man das Gem „sys-uname“ verwenden. Damit bekommt neben dem Betriebssystem auch viele weitere Informationen über die Umgebung heraus.

Installation von sys-uname:

[bash]
gem install sys-uname
[/bash]

Verwendung von sys-uname:

[ruby]
require ’sys/uname‘
include Sys

puts Uname.nodename
puts Uname.version
puts Uname.sysname
puts Uname.machine
puts Uname.release

p Uname.uname
[/ruby]

Auf diese Weise bekommt alle relevanten Daten die man ggf. benötigt.