Oje noch ein Blog Übers Leben, das Universum und den ganzen anderen Rest…

13Apr/110

String mit .NET komprimieren und und mit Ruby wieder entpacken

Das hab ich gebastelt um einen XML String aus .NET über POST Request an eine Ruby on Rails Applikation zu übertragen und dort weiterzuverarbeiten. Um beim senden keine Probleme zu verursachen wird der GZIP komprimierte String BASE64 kodiert.

.NET Code (VB.NET 2010)

Imports System.Security.Cryptography
Imports System.IO.Compression

Public Function Compress(ByVal text As String) As String
	Try
		Dim buffer() As Byte = Encoding.UTF8.GetBytes(text)
		Dim memoryStream = New MemoryStream()
		Using gZipStream = New GZipStream(memoryStream, CompressionMode.Compress, True)
			gZipStream.Write(buffer, 0, buffer.Length)
		End Using
		Return Convert.ToBase64String(memoryStream.GetBuffer)

	Catch ex As Exception
		WriteToDebugLog("Compress", ex.Message)
		Return Nothing
	End Try

End Function

RoR Code (Ruby 1.9.2 / Rails 3)

require "base64"
require 'nokogiri'
xml = ActiveSupport::Gzip.decompress(Base64.decode64( ))
xml_doc = Nokogiri::XML(xml) do |config|
	config.noblanks
end
# Zugriff auf Elemente über
xml_doc.xpath()

Evtl. hilfts ja jemandem bei was auch immer.

21Sep/091

Der nervende Edelstein

Ich freunde mich gerade mit Ruby on Rails an, da war es naheliegend sich eine schöne IDE dafür zu suchen die bereits Testserver und alles enthält so das man sich nicht mit der Installation des selbigen herumschlagen muss.

Meine Wahl fiel dabei auf Aptana RadRails, ein wirklich nettes Produkt.

Das einzige Problem was ich bisher hatte, und das auch nur auf dem Laptop hier im Büro, war das grundlose verweigern jeder Art von Plugin-Installation via GEM.

Jeder Versuch wurde mit

ERROR: While executing gem ... (Errno::ENOENT)
No such file or directory - U:/

quitiert. Das Laufwerk U:/ ist mein Homedrive im Netzwerk.

Die Lösungsvorschläge aus dem Netz, die Umgebungsvariablen “GEM_HOME” und “GEM_PATH” zu setzen hatten leider keinen positiven Effekt.

Ein kleiner Eintrag in der gem Datei unter c:\ruby\bin\gem bringt die Erlösung:

#!C:/Ruby/bin/ruby.exe
#--
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
# All rights reserved.
# See LICENSE.txt for permissions.
#++
ENV['HOME'] = "C:/ruby"
require 'rubygems'
require 'rubygems/gem_runner'
require 'rubygems/exceptions'
required_version = Gem::Requirement.new "> 1.8.3"
unless required_version.satisfied_by? Gem.ruby_version then
  abort "Expected Ruby Version #{required_version}, was #{Gem.ruby_version}"
end
args = ARGV.clone
begin
  Gem::GemRunner.new.run args
rescue Gem::SystemExitException => e
  exit e.exit_code
end

Vielleicht gibts noch eine bessere Lösung, so funktioniert es bei mir aber auf alle Fälle ohne herumdoktorn an den Umgebunsvariablen.