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.
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.