<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:series="http://organizeseries.com/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
	<title>Feldstudie.net</title>
	
	<link>http://www.feldstudie.net</link>
	<description>Geek in training...</description>
	<lastBuildDate>Fri, 17 May 2013 06:54:23 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/feldstudie" /><feedburner:info uri="feldstudie" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>feldstudie</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Apache access.log mit node.js in Realtime parsen und zur Weiterverabeitung in RabbitMQ queuen</title>
		<link>http://feedproxy.google.com/~r/feldstudie/~3/0mHn2qeix34/</link>
		<comments>http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/#comments</comments>
		<pubDate>Fri, 17 May 2013 06:54:23 +0000</pubDate>
		<dc:creator>Torsten</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[access.log]]></category>
		<category><![CDATA[accesslog]]></category>
		<category><![CDATA[amqp]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[async]]></category>
		<category><![CDATA[carrier]]></category>
		<category><![CDATA[chokidar]]></category>
		<category><![CDATA[fs.watch]]></category>
		<category><![CDATA[Logrotation]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[node-amqp]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[rabbitMQ]]></category>
		<category><![CDATA[tail]]></category>
		<category><![CDATA[worker]]></category>
		<guid isPermaLink="false">http://www.feldstudie.net/?p=3817</guid>
		<description><![CDATA[F&#252;r ein firmeninternes Projekt (nein, hier werden keine 'Internals' preisgegeben ) werte ich Apache access.log Dateien aus. Dies geschieht aktuell mittels eines Cronjobs, welcher ein PHP Script startet und das Log Zeile f&#252;r Zeile ausliest, die Daten via Regular Expressions und StringSplit parsed und anschlie&#223;end in eine MySQL-Datenbank schreibt. Das Problem hierbei ist, dass sowohl die [...]]]></description>
				<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->F&#252;r ein firmeninternes Projekt (nein, hier werden keine 'Internals' preisgegeben <img src='http://www.feldstudie.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) werte ich Apache access.log Dateien aus. Dies geschieht aktuell mittels eines Cronjobs, welcher ein PHP Script startet und das Log Zeile f&#252;r Zeile ausliest, die Daten via Regular Expressions und StringSplit parsed und anschlie&#223;end in eine MySQL-Datenbank schreibt. Das Problem hierbei ist, dass sowohl die Dateien (Logrotation ist auf 15 Minuten eingestellt) als auch die Zeilen seriell bearbeitet werden und dies nat&#252;rlich sehr lange dauert. Zwischenzeitlich habe ich mir bereits gearman angeschaut, um trotz der Verwendung mit PHP diese Prozesse zu parallelisieren, jedoch habe ich hierbei bereits nach kurzer Zeit die Flinte ins Korn geworfen.</p>
<p>Nachdem ich mich nun mittlerweile seit einiger Zeit mit Node.js besch&#228;ftigt habe und nach einer knappen Woche auch gut mit <a href="http://www.rabbitmq.com/" target="_blank">RabbitMQ</a> und dem Node.js-Modul <a href="https://github.com/postwait/node-amqp" target="_blank">node-amqp</a> zurechtkomme, kam mir eine neue Idee. Warum nicht das access.log in Echtzeit auslesen, neu hinzugekommene Zeilen in eine RabbitMQ Queue zu schreiben und dann mit mehreren Worker-Prozessen parallel zu parsen und in eine Datenbank zu schreiben. Somit m&#252;sste nicht mehr auf die n&#228;chste Log-Rotation (15 min) und die Fertigstellung des Parsing-Scripts gewartet werden und es st&#252;nden die Daten nahezu in Echtzeit zur Verf&#252;gung.</p>
<p>Hier also die ersten Schritte, um das neue Konzept umzusetzen:<span id="more-3817"></span></p>
<h3>Schritt 1 - Vorbereitung</h3>
<p>Zuerst laden wir die Module, welche f&#252;r das Projekt ben&#246;tigen:</p><pre class="crayon-plain-tag">var fs = require('fs');		// Zugriff auf das Dateisystem
events = require('events');	// Erstellung eigener Events
util = require('util');		//
async = require('async');	// asynchrone Schleifen, etc.
amqp = require('amqp');		// Modul für Verbindung zu RabbitMQ
sys = require('sys');		// Zugriff auf das System
spawn = require('child_process').spawn;	// Erstellung von Child-Prozessen</pre><p></p>
<h3>Schritt 2 - vorbereiten und erstellen der Verbindung zu RabbitMQ</h3>
<p>Da die Informationen aus dem access.log direkt in eine Queue geschrieben werden sollen, um sie sp&#228;ter parallel von mehreren Workern verarbeiten zu k&#246;nnen, muss zuerst eine Verbindung mit RabbitMQ hergestellt werden, welcher diese Queues verwaltet.</p><pre class="crayon-plain-tag">var defaultExchange = 'amq.topic';
var rabbitMQ = amqp.createConnection({
	host: 'hostname.example.com',
	login: 'user-publisher',
	password: 'superGeheim',
	vhost: '/'
}, {
	defaultExchangeName: defaultExchange
});</pre><p>Den <pre class="crayon-plain-tag">defaultExchangeName</pre>  habe ich bewusst ein eine gesonderte Variable geschrieben, da sp&#228;ter noch die Queue an den Exchange gebunden werden muss und dort der Name erneut ben&#246;tigt wird. Dar&#252;ber hinaus wird lediglich die Verbindung mit den entsprechenden Benutzerdaten zu dem angegebenen Host aufgebaut.</p>
<h3>Schritt 3 - &#220;berpr&#252;fen der Verf&#252;gbarkeit und Erstellen der Queue</h3>
<p>Wir warten auf das 'ready'-Event der Verbindung zu RabbitMQ und legen anschlie&#223;end die notwendigen Parameter f&#252;r die von uns ben&#246;tigte Queue fest, falls diese nicht vorhanden sein sollte und erstellt werden muss. Sollte diese nicht bereits vorhanden sein, wird sie mit den von uns vorgegebenen Werten erstellt, ansonsten wird die vorhandenen Queue genutzt, wie sie beim Erstellen konfiguriert wurde. Ist die &#220;berpr&#252;fung bzw. die Erstellung abgeschlossen, emitten wir das Event 'ready', um mit dem Einlesen des Logs zu beginnen.</p><pre class="crayon-plain-tag">rabbitMQ.on('ready', function() {
	var queueOptions = {
		durable: true,
		autoDelete: false
	};
	var queueName = 'log-test';
	var q = rabbitMQ.queue(queueName, queueOptions, function(queue) {
		console.log('queueName ' + queueName + ' has been created');
		q.emit('ready');
	});
	util.inherits(q, events.EventEmitter);
});</pre><p></p>
<h3>Schritt 4 - Einlesen des access.log in Echtzeit</h3>
<p>Ich habe mir einige Module angeschaut, welche dabei helfen sollen, Dateien kontinuierlich einzulesen, welche von einem fremden Prozess permanent erweitert werden. Dazu geh&#246;rten u.a. <a href="http://nodejs.org/docs/latest/api/fs.html#fs_fs_watch_filename_options_listener">fs.watch</a>, <a href="https://github.com/paulmillr/chokidar">chokidar</a> und <a href="https://github.com/pgte/carrier">carrier</a>. Leider half mir keines bei meinem Problem. Ich habe mich daher entschlossen, auf das Tool 'tail' zur&#252;ckzugreifen, welches mittels des Parameters -f kontinuierlich die letzten Zeilen des Logs auf der Standardausgabe ausgibt. Dieses Programm ist normalerweise nur unter Linux standardm&#228;&#223;ig vorhanden, jedoch gibt es auch seit einiger Zeit eine entsprechende <a title="Tail command for Windows (CMD)" href="http://www.windows-commandline.com/2010/08/tail-command-for-windows.html" target="_blank">Portierung f&#252;r Windows</a>. Tail wird daher f&#252;r unsere Zwecke in einem Child-Prozess gestartet und die Ausgabe als Buffer-Stream weiterverarbeitet.</p>
<p>Im ersten Schritt habe ich den Buffer in einen UTF-8 String umgewandelt und diesen &#252;ber die Newline-Zeichen gesplittet, um f&#252;r jede Zeile des Logs einen eigenen String zu erhalten. Bei einer Erweiterung des Scripts durch Worker-Prozesse, welche die Hauptaufgabe des Parsens &#252;bernehmen sollen, w&#228;re zu &#252;berlegen, ob es nicht sinnvoller und schneller w&#228;re, erst dort der Buffer zu splitten. Aktuell bleiben wir aber erstmal bei der vorhandenen L&#246;sung.</p>
<p>F&#252;r das Durchlaufen der einzelnen Felder des Arrays verwende ich das <a href="https://github.com/caolan/async/" target="_blank">'async'-Modul f&#252;r Node.js</a>, welches das asynchrone bearbeiten der Felder erm&#246;glicht, so dass hier ein weiterer Performancegewinn zu verzeichnen ist. Dabei wird f&#252;r jeden String &#252;berpr&#252;ft, ob dieser leer ist und sollte dies nicht der Fall sein, wird dieser &#252;ber rabbitMQ.publish und den entsprechenden defaultExchange an die Queue gesendet.</p><pre class="crayon-plain-tag">q.on('ready', function() {
	q.bind(defaultExchange, q.name);
	console.log('ready event for queue triggered');
	var file = "d:/xampp/apache/logs/access.log";
	var tailpath = 'tail.exe';
	var tail = spawn(tailpath, ["-f", file]);
	tail.stdout.on('data', function(data) {
		var buff = new Buffer(data);
		var logLine = buff.toString('utf8');
		var splitByNewLines = logLine.split(/\r\n/g);
		async.each(splitByNewLines, function(item, callback) {
			if (item === '') {
				console.log('empty');
			} else {
				rabbitMQ.publish(q.name, item);
			}
		}, function(err) {
			console.log(err);
		});
		console.log(splitByNewLines);
	});
});</pre><p></p>
<h3>Schritt 5 - &#220;berpr&#252;fen der Ergebnisse in RabbitMQ</h3>
<p>Wenn wir uns die Konsole und die entsprechende Queue in RabbitMQ ansehen, k&#246;nnen wir beobachten, wie die Zugriffe auf den Webserver in Echtzeit ausgelesen und gequeued werden:</p>
<p>
<a href='http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/2013-05-17_08-26-08/' title='2013-05-17_08-26-08'><img width="150" height="150" src="http://www.feldstudie.net/wp-content/uploads/2013/05/2013-05-17_08-26-08-150x150.png" class="attachment-thumbnail" alt="2013-05-17_08-26-08" /></a>
<a href='http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/2013-05-17_08-27-30/' title='2013-05-17_08-27-30'><img width="150" height="150" src="http://www.feldstudie.net/wp-content/uploads/2013/05/2013-05-17_08-27-30-150x150.png" class="attachment-thumbnail" alt="2013-05-17_08-27-30" /></a>
<a href='http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/2013-05-17_08-28-03/' title='2013-05-17_08-28-03'><img width="150" height="150" src="http://www.feldstudie.net/wp-content/uploads/2013/05/2013-05-17_08-28-03-150x150.png" class="attachment-thumbnail" alt="2013-05-17_08-28-03" /></a>
</p>
<p>&nbsp;</p>
<p>&nbsp;<br />
<hr />
<h2>Ähnliche Beiträge:</h2>
<ul>
<li><a href="http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/" rel="bookmark" title="Permanent Link: node.js &#8211; Probleme mit cluster modul unter Ubuntu">node.js &#8211; Probleme mit cluster modul unter Ubuntu</a></li>
<li><a href="http://www.feldstudie.net/2008/06/03/von-wegen-breakdance-kommt-aus-den-amerikanischen-ghettos/" rel="bookmark" title="Permanent Link: Von wegen Breakdance kommt aus den amerikanischen Ghettos">Von wegen Breakdance kommt aus den amerikanischen Ghettos</a></li>
<li><a href="http://www.feldstudie.net/2009/04/22/firmware-update-fuer-huawei-e160-und-neue-version-von-mobile-partner/" rel="bookmark" title="Permanent Link: Firmware Update f&#252;r Huawei E160 und neue Version von Mobile Partner">Firmware Update f&#252;r Huawei E160 und neue Version von Mobile Partner</a></li>
<li><a href="http://www.feldstudie.net/2007/11/04/technet-webcast-windows-server-2008-technische-neuerungen-teil-8/" rel="bookmark" title="Permanent Link: TechNet Webcast: Windows Server 2008 &#8211; Technische Neuerungen (Teil 8)">TechNet Webcast: Windows Server 2008 &#8211; Technische Neuerungen (Teil 8)</a></li>
<li><a href="http://www.feldstudie.net/2008/04/30/links-vom-11-300408/" rel="bookmark" title="Permanent Link: Links vom 11.-30.04.08">Links vom 11.-30.04.08</a></li>
</ul>
<hr /><small>Copyright &copy; 2008 by <a href="http://www.feldstudie.net" title="Feldstudie.net">Feldstudie.net</a> - (Digital Fingerprint: 28dc32f28bc4317f666dd03761cded9e (74.125.182.28) )</small>
<div class="shr-publisher-3817"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/' data-shr_title='Apache+access.log+mit+node.js+in+Realtime+parsen+und+zur+Weiterverabeitung+in+RabbitMQ+queuen'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/' data-shr_title='Apache+access.log+mit+node.js+in+Realtime+parsen+und+zur+Weiterverabeitung+in+RabbitMQ+queuen'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/' data-shr_title='Apache+access.log+mit+node.js+in+Realtime+parsen+und+zur+Weiterverabeitung+in+RabbitMQ+queuen'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/feldstudie?a=0mHn2qeix34:M4NmlQ-t5i0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=0mHn2qeix34:M4NmlQ-t5i0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/feldstudie?i=0mHn2qeix34:M4NmlQ-t5i0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=0mHn2qeix34:M4NmlQ-t5i0:2nqncYFp4_M"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=2nqncYFp4_M" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=0mHn2qeix34:M4NmlQ-t5i0:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/feldstudie/~4/0mHn2qeix34" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<series:name><![CDATA[node.js]]></series:name>
	<feedburner:origLink>http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/</feedburner:origLink></item>
		<item>
		<title>Prozesse unter Linux anhand des Prozessnamen beenden</title>
		<link>http://feedproxy.google.com/~r/feldstudie/~3/Yj23lm6jsCE/</link>
		<comments>http://www.feldstudie.net/2013/05/07/prozesse-unter-linux-anhand-des-prozessnamen-beenden/#comments</comments>
		<pubDate>Tue, 07 May 2013 06:26:01 +0000</pubDate>
		<dc:creator>Torsten</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[commandline]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[Crontab]]></category>
		<category><![CDATA[kill]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[pkill]]></category>
		<category><![CDATA[Shell]]></category>
		<guid isPermaLink="false">http://www.feldstudie.net/?p=3807</guid>
		<description><![CDATA[Dies ist vmtl. eher eine Notiz f&#252;r mich, als ein ausgewachsener Artikel. Nichtsdestotrotz habe ich ab und an das Problem, dass sich PHP-Prozesse die &#252;ber die CLI per Cron gestartet werden, nicht sauber beenden. Grunds&#228;tzlich sollte hier nat&#252;rlich nach der Ursache des Problems gesucht werden, aber um erstmal wieder Herr &#252;ber den Server und seine [...]]]></description>
				<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->Dies ist vmtl. eher eine Notiz f&#252;r mich, als ein ausgewachsener Artikel. Nichtsdestotrotz habe ich ab und an das Problem, dass sich PHP-Prozesse die &#252;ber die CLI per Cron gestartet werden, nicht sauber beenden. Grunds&#228;tzlich sollte hier nat&#252;rlich nach der Ursache des Problems gesucht werden, aber um erstmal wieder Herr &#252;ber den Server und seine Prozesse zu werden, ist das Beenden dieser der erste Schritt.</p>
<p>Hierzu muss lediglich folgender Befehl ausgef&#252;hrt werden:</p><pre class="crayon-plain-tag">pkill -9 -f /usr/bin/php</pre><p>&nbsp;<br />
<hr />
<h2>Ähnliche Beiträge:</h2>
<ul>
<li><a href="http://www.feldstudie.net/2007/12/21/images-unter-ubuntu-konvertieren/" rel="bookmark" title="Permanent Link: Images unter Ubuntu konvertieren">Images unter Ubuntu konvertieren</a></li>
<li><a href="http://www.feldstudie.net/2008/04/16/software-unter-windows-auf-linux-dateisysteme-zugreifen/" rel="bookmark" title="Permanent Link: [Software] Unter Windows auf Linux-Dateisysteme zugreifen">[Software] Unter Windows auf Linux-Dateisysteme zugreifen</a></li>
<li><a href="http://www.feldstudie.net/2009/03/24/realtek-rtl8187se-treiber-fuer-linux/" rel="bookmark" title="Permanent Link: Realtek rtl8187se Treiber f&#252;r Linux">Realtek rtl8187se Treiber f&#252;r Linux</a></li>
<li><a href="http://www.feldstudie.net/2007/12/18/aus-windows-auf-linux-partitionen-zugreifen/" rel="bookmark" title="Permanent Link: Aus Windows auf Linux Partitionen zugreifen">Aus Windows auf Linux Partitionen zugreifen</a></li>
<li><a href="http://www.feldstudie.net/2009/03/22/backtrack-auf-lg-x110-von-sd-karte-starten/" rel="bookmark" title="Permanent Link: Backtrack auf LG X110 von SD-Karte starten">Backtrack auf LG X110 von SD-Karte starten</a></li>
</ul>
<hr /><small>Copyright &copy; 2008 by <a href="http://www.feldstudie.net" title="Feldstudie.net">Feldstudie.net</a> - (Digital Fingerprint: 28dc32f28bc4317f666dd03761cded9e (74.125.182.28) )</small>
<div class="shr-publisher-3807"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http://www.feldstudie.net/2013/05/07/prozesse-unter-linux-anhand-des-prozessnamen-beenden/' data-shr_title='Prozesse+unter+Linux+anhand+des+Prozessnamen+beenden'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http://www.feldstudie.net/2013/05/07/prozesse-unter-linux-anhand-des-prozessnamen-beenden/' data-shr_title='Prozesse+unter+Linux+anhand+des+Prozessnamen+beenden'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http://www.feldstudie.net/2013/05/07/prozesse-unter-linux-anhand-des-prozessnamen-beenden/' data-shr_title='Prozesse+unter+Linux+anhand+des+Prozessnamen+beenden'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/feldstudie?a=Yj23lm6jsCE:nWMpt2v_Uzw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=Yj23lm6jsCE:nWMpt2v_Uzw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/feldstudie?i=Yj23lm6jsCE:nWMpt2v_Uzw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=Yj23lm6jsCE:nWMpt2v_Uzw:2nqncYFp4_M"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=2nqncYFp4_M" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=Yj23lm6jsCE:nWMpt2v_Uzw:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/feldstudie/~4/Yj23lm6jsCE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.feldstudie.net/2013/05/07/prozesse-unter-linux-anhand-des-prozessnamen-beenden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<series:name><![CDATA[PHP / Javascript]]></series:name>
	<feedburner:origLink>http://www.feldstudie.net/2013/05/07/prozesse-unter-linux-anhand-des-prozessnamen-beenden/</feedburner:origLink></item>
		<item>
		<title>Verwenden von mehreren GitHub Repositories in Jenkins</title>
		<link>http://feedproxy.google.com/~r/feldstudie/~3/ir4hsGnDGhI/</link>
		<comments>http://www.feldstudie.net/2013/05/06/verwenden-von-mehreren-github-repositories-in-jenkins/#comments</comments>
		<pubDate>Mon, 06 May 2013 18:31:59 +0000</pubDate>
		<dc:creator>Torsten</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[keygen]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[SSH]]></category>
		<guid isPermaLink="false">http://www.feldstudie.net/?p=3798</guid>
		<description><![CDATA[F&#252;r ein neues GitHub (Enterprise) Projekt wollte ich heute auf Jenkins einen neuen Job anlegen. Da ich bereits in der Vergangenheit f&#252;r einen anderen Jenkins-Job einen SSH-Key erstellt habe, wollte ich diesen auch f&#252;r das neue GitHub-Repository nutzen. Beim Hinzuf&#252;gen des Deploy-Keys erschien jedoch folgende Fehlermeldung: Leider ist es scheinbar nicht m&#246;glich, einen SSH-Key f&#252;r [...]]]></description>
				<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->F&#252;r ein neues GitHub (Enterprise) Projekt wollte ich heute auf Jenkins einen neuen Job anlegen. Da ich bereits in der Vergangenheit f&#252;r einen anderen Jenkins-Job einen SSH-Key erstellt habe, wollte ich diesen auch f&#252;r das neue GitHub-Repository nutzen. Beim Hinzuf&#252;gen des Deploy-Keys erschien jedoch folgende Fehlermeldung:</p>
<p><a href="http://www.feldstudie.net/wp-content/uploads/2013/05/gh-key-already-in-use.jpg"><img class="aligncenter size-full wp-image-3802" alt="gh-key-already-in-use" src="http://www.feldstudie.net/wp-content/uploads/2013/05/gh-key-already-in-use.jpg" width="330" height="52" /></a></p>
<p>Leider ist es scheinbar nicht m&#246;glich, einen SSH-Key f&#252;r mehrere Repositories zu nutzen. Da es sich um GitHub:Enterprise handelt, war es au&#223;erdem nicht m&#246;glich einen extra Benutzer anzulegen, welcher einfach dem Projekt hinzugef&#252;gt h&#228;tte werden k&#246;nnen. Nach kurzer Recherche bin ich auf <a title="Jenkins and GitHub: Multiple Private Projects" href="http://www.onemogin.com/blog/2011/9/1/jenkins-and-github-multiple-private-projects.html" target="_blank">diese Anleitung</a> gesto&#223;en, welche sowohl das Problem beschreibt als auch direkt eine L&#246;sung bereitstellt.</p>
<p>Zuerst erstellt man f&#252;r jedes Repository einen eigenen SSH-Key, bei welchem der Schl&#252;ssel am besten bereits den Namen des Projekts beinhaltet und somit sp&#228;ter einfacher zu identifizieren ist:</p><pre class="crayon-plain-tag">ssh-keygen -t rsa -f ./id_rsa_newproject</pre><p>Der Befehl sollte m&#246;glichst unter dem gleichen Benutzer ausgef&#252;hrt werden, unter welchem der Schl&#252;ssel sp&#228;ter verwendet werden soll (in meinem Fall "jenkins"), so dass dieser direkt in das .ssh Verzeichnis im Home erstellt wird. Damit sp&#228;ter f&#252;r jedes GitHub-Repository der korrekte Schl&#252;ssel benutzt wird, legt man im Verzeichnis die Datei config an und gibt einen virtuellen Host, den echten Host, den User mit welchem die Verbindung aufgebaut werden soll und den absoluten Pfad zum SSH-Key an.</p><pre class="crayon-plain-tag">Host github.sub.domain.com-newproject
        Hostname github.sub.domain.com
        User git
        IdentityFile /var/lib/jenkins/.ssh/id_rsa_newproject</pre><p>In der Konfiguration von Jenkins gibt man nun anstelle von z.B.</p><pre class="crayon-plain-tag">git@github.sub.domain.com:User/New-Project.git</pre><p>folgendes an:</p><pre class="crayon-plain-tag">git@github.sub.domain.com-newproject:User/New-Project.git</pre><p>Bei dem Aufruf wird zuerst in der .ssh/config nach dem angebenen Hostnamen geschaut und anschlie&#223;end werden die dort konfigurierten Einstellungen f&#252;r diese Verbindung &#252;bernommen.<br />
<hr />
<h2>Ähnliche Beiträge:</h2>
<ul>
<li><a href="http://www.feldstudie.net/2012/12/26/installation-von-git-flow-bei-nutzung-von-git-extensions/" rel="bookmark" title="Permanent Link: Installation von git flow bei Nutzung von Git Extensions">Installation von git flow bei Nutzung von Git Extensions</a></li>
<li><a href="http://www.feldstudie.net/2009/09/29/alte-debian-repositories/" rel="bookmark" title="Permanent Link: Alte Debian Repositories">Alte Debian Repositories</a></li>
<li><a href="http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/" rel="bookmark" title="Permanent Link: node.js &#8211; Probleme mit cluster modul unter Ubuntu">node.js &#8211; Probleme mit cluster modul unter Ubuntu</a></li>
<li><a href="http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/" rel="bookmark" title="Permanent Link: Apache access.log mit node.js in Realtime parsen und zur Weiterverabeitung in RabbitMQ queuen">Apache access.log mit node.js in Realtime parsen und zur Weiterverabeitung in RabbitMQ queuen</a></li>
<li><a href="http://www.feldstudie.net/2007/12/12/wie-man-powerpoint-nicht-verwenden-sollte/" rel="bookmark" title="Permanent Link: Wie man PowerPoint nicht verwenden sollte">Wie man PowerPoint nicht verwenden sollte</a></li>
</ul>
<hr /><small>Copyright &copy; 2008 by <a href="http://www.feldstudie.net" title="Feldstudie.net">Feldstudie.net</a> - (Digital Fingerprint: 28dc32f28bc4317f666dd03761cded9e (74.125.182.28) )</small>
<div class="shr-publisher-3798"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http://www.feldstudie.net/2013/05/06/verwenden-von-mehreren-github-repositories-in-jenkins/' data-shr_title='Verwenden+von+mehreren+GitHub+Repositories+in+Jenkins'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http://www.feldstudie.net/2013/05/06/verwenden-von-mehreren-github-repositories-in-jenkins/' data-shr_title='Verwenden+von+mehreren+GitHub+Repositories+in+Jenkins'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http://www.feldstudie.net/2013/05/06/verwenden-von-mehreren-github-repositories-in-jenkins/' data-shr_title='Verwenden+von+mehreren+GitHub+Repositories+in+Jenkins'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/feldstudie?a=ir4hsGnDGhI:rOtJX6U8qCs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=ir4hsGnDGhI:rOtJX6U8qCs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/feldstudie?i=ir4hsGnDGhI:rOtJX6U8qCs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=ir4hsGnDGhI:rOtJX6U8qCs:2nqncYFp4_M"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=2nqncYFp4_M" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=ir4hsGnDGhI:rOtJX6U8qCs:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/feldstudie/~4/ir4hsGnDGhI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.feldstudie.net/2013/05/06/verwenden-von-mehreren-github-repositories-in-jenkins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.feldstudie.net/2013/05/06/verwenden-von-mehreren-github-repositories-in-jenkins/</feedburner:origLink></item>
		<item>
		<title>Dynamisches Setzen von NODE_ENV für Produktions- bzw. Entwicklungsumgebung mit Node.js</title>
		<link>http://feedproxy.google.com/~r/feldstudie/~3/1EpPvsMKCD8/</link>
		<comments>http://www.feldstudie.net/2013/05/05/dynamisches-setzen-von-node_env-fur-produktions-bzw-entwicklungsumgebung-mit-node-js/#comments</comments>
		<pubDate>Sun, 05 May 2013 09:58:30 +0000</pubDate>
		<dc:creator>Torsten</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[nodejs]]></category>
		<category><![CDATA[NODE_ENV]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[socket.io]]></category>
		<category><![CDATA[switch]]></category>
		<category><![CDATA[websocket]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://www.feldstudie.net/?p=3791</guid>
		<description><![CDATA[In den meisten F&#228;llen empfiehlt es sich, f&#252;r Produktions- und Entwicklungsumgebungen unterschiedliche Konfigurationen zu w&#228;hlen. Insbesondere ist hier das Logging zu nennen, da auf den Umgebungen, auf welchen entwickelt wird, meist mehr Informationen w&#228;hrend der Ausf&#252;hrung ben&#246;tigt werden, als auf Produktivumgebungen. Grunds&#228;tzlich ist die Empfehlung, die Umgebungsvariable NODE_ENV im Betriebssystem zu setzen. Dies funktioniert jedoch [...]]]></description>
				<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->In den meisten F&#228;llen empfiehlt es sich, f&#252;r Produktions- und Entwicklungsumgebungen unterschiedliche Konfigurationen zu w&#228;hlen. Insbesondere ist hier das Logging zu nennen, da auf den Umgebungen, auf welchen entwickelt wird, meist mehr Informationen w&#228;hrend der Ausf&#252;hrung ben&#246;tigt werden, als auf Produktivumgebungen.</p>
<p>Grunds&#228;tzlich ist die Empfehlung, die Umgebungsvariable NODE_ENV im Betriebssystem zu setzen. Dies funktioniert jedoch nur dann, wenn das entsprechende System grunds&#228;tzlich nur f&#252;r Produktion oder Entwicklung genutzt wird. F&#252;r das letzte Testen von &#196;nderungen vor dem 'Release' verwende ich jedoch das gleiche System, auf welchem sp&#228;ter die Anwendung auch produktiv l&#228;uft, um Betriebssystem-abh&#228;ngige Fehler auszuschlie&#223;en (siehe z.B. <a title="node.js – Probleme mit cluster modul unter Ubuntu" href="http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/">diesen Beitrag</a>). W&#252;rde ich also auf diesem System f&#252;r die Umgebungsvariable NODE_ENV auf 'production' setzen, w&#252;rde auch das Testing ohne erweitertes Logging durchgef&#252;hrt. Hier macht es also Sinn, die Variable dynamisch anhand von bestimmten Kriterien zu setzen und diese dann zu nutzen, um die Umgebung und somit die Konfiguration zu bestimmen.</p>
<p>Da ich (bisher) grunds&#228;tzlich unter Windows entwickle, das Produktivsystem jedoch auf Linux l&#228;uft, <a href="http://nodejs.org/api/process.html#process_process_platform">ist das erste Kriterium bereits klar</a>. Da auf dem Produktivsystem jedoch auch das letzte Testing l&#228;uft muss hier nochmals unterschieden werden. Gl&#252;cklicherweise l&#228;uft dieses immer in einem Verzeichnis, welches 'dev' enth&#228;lt. Somit ist auch das zweite Kriterium festgelegt. Hier der Code dazu:<span id="more-3791"></span></p><pre class="crayon-plain-tag">var path = require('path');
var scriptPath = path.dirname(require.main.filename);
switch (true) {
    case process.platform === 'win32': // if os is windows (x64 is win32 as well)
    case scriptPath.indexOf('dev') &gt;= 0: // or if path contains 'dev'
        process.env.NODE_ENV = 'development'; // set NODE_ENV to 'development'
        break;
    default:
        process.env.NODE_ENV = 'production'; // else set 'production'
        break;
}</pre><p>Um auf den Pfad zugreifen zu k&#246;nnen, wird das 'path'-Modul ben&#246;tigt, welches wir in Zeile 1 einbinden. Anschlie&#223;end deklarieren wir die Variable 'scriptPath' und weisen Ihr den Pfad der ausgef&#252;hrten Applikation zu. Im Anschluss pr&#252;fen wir nun in einer 'switch'-Anweisung die o.g. Kriterien ab und setzen die Systemvariable entsprechend.</p>
<p>Anschlie&#223;end geben wir den Wert von 'NODE_ENV' &#252;ber die Console aus, um ggf. sp&#228;ter das Ergebnis pr&#252;fen zu k&#246;nnen. Danach k&#246;nnen wir wie gewohnt die socket.io Konfiguration abh&#228;ngig von der Umgebung vornehmen:</p><pre class="crayon-plain-tag">console.log('environment setting: ' + process.env.NODE_ENV);
io.configure('production', function() {
    io.enable('browser client minification');  // send minified client
    io.enable('browser client etag');          // apply etag caching logic based on version number
    io.enable('browser client gzip');          // gzip the file
    io.set('log level', 1);                    // reduce logging
});
io.configure('development', function() {
    io.set('log level', 3);
});</pre><p>M&#246;chte man nun abh&#228;ngig von der Umgebung den Server auf einem anderen Port starten, kann man den Code wie folgt erg&#228;nzen:</p><pre class="crayon-plain-tag">var portToListen = 0;
console.log('environment setting: ' + process.env.NODE_ENV);
io.configure('production', function() {
    portToListen = 8081;                       // define port for production environment
    io.enable('browser client minification');  // send minified client
    io.enable('browser client etag');          // apply etag caching logic based on version number
    io.enable('browser client gzip');          // gzip the file
    io.set('log level', 1);                    // reduce logging
});
io.configure('development', function() {
    portToListen = 8083;                       // define port for production environment
    io.set('log level', 3);
});
server.listen(portToListen);                   // start server with port defined</pre><p>Mittels netstat kann das Ergebnis &#252;berpr&#252;ft werden:</p><pre class="crayon-plain-tag">C:\Windows\system32&gt;netstat -anp tcp | findstr :808
  TCP    0.0.0.0:8083           0.0.0.0:0              ABHÖREN</pre><p>Macht Ihr es &#228;hnlich oder habt Ihr noch Verbesserungsvorschl&#228;ge? &#220;ber Kommentare freue ich mich. <img src='http://www.feldstudie.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<hr />
<h2>Ähnliche Beiträge:</h2>
<ul>
<li><a href="http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/" rel="bookmark" title="Permanent Link: node.js &#8211; Probleme mit cluster modul unter Ubuntu">node.js &#8211; Probleme mit cluster modul unter Ubuntu</a></li>
<li><a href="http://www.feldstudie.net/2008/06/03/von-wegen-breakdance-kommt-aus-den-amerikanischen-ghettos/" rel="bookmark" title="Permanent Link: Von wegen Breakdance kommt aus den amerikanischen Ghettos">Von wegen Breakdance kommt aus den amerikanischen Ghettos</a></li>
<li><a href="http://www.feldstudie.net/2009/05/27/windows-defender-deaktivieren-2/" rel="bookmark" title="Permanent Link: Windows Defender deaktivieren">Windows Defender deaktivieren</a></li>
<li><a href="http://www.feldstudie.net/2008/04/22/macbook-air-auf-gratis-gutscheinede-gewinnen/" rel="bookmark" title="Permanent Link: MacBook Air auf gratis-gutscheine.de gewinnen">MacBook Air auf gratis-gutscheine.de gewinnen</a></li>
<li><a href="http://www.feldstudie.net/2013/05/17/apache-access-log-mit-node-js-in-realtime-parsen-und-zur-weiterverabeitung-in-rabbitmq-queuen/" rel="bookmark" title="Permanent Link: Apache access.log mit node.js in Realtime parsen und zur Weiterverabeitung in RabbitMQ queuen">Apache access.log mit node.js in Realtime parsen und zur Weiterverabeitung in RabbitMQ queuen</a></li>
</ul>
<hr /><small>Copyright &copy; 2008 by <a href="http://www.feldstudie.net" title="Feldstudie.net">Feldstudie.net</a> - (Digital Fingerprint: 28dc32f28bc4317f666dd03761cded9e (74.125.182.28) )</small>
<div class="shr-publisher-3791"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http://www.feldstudie.net/2013/05/05/dynamisches-setzen-von-node_env-fur-produktions-bzw-entwicklungsumgebung-mit-node-js/' data-shr_title='Dynamisches+Setzen+von+NODE_ENV+f%C3%BCr+Produktions-+bzw.+Entwicklungsumgebung+mit+Node.js'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http://www.feldstudie.net/2013/05/05/dynamisches-setzen-von-node_env-fur-produktions-bzw-entwicklungsumgebung-mit-node-js/' data-shr_title='Dynamisches+Setzen+von+NODE_ENV+f%C3%BCr+Produktions-+bzw.+Entwicklungsumgebung+mit+Node.js'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http://www.feldstudie.net/2013/05/05/dynamisches-setzen-von-node_env-fur-produktions-bzw-entwicklungsumgebung-mit-node-js/' data-shr_title='Dynamisches+Setzen+von+NODE_ENV+f%C3%BCr+Produktions-+bzw.+Entwicklungsumgebung+mit+Node.js'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/feldstudie?a=1EpPvsMKCD8:9u7AMqN52Eo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=1EpPvsMKCD8:9u7AMqN52Eo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/feldstudie?i=1EpPvsMKCD8:9u7AMqN52Eo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=1EpPvsMKCD8:9u7AMqN52Eo:2nqncYFp4_M"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=2nqncYFp4_M" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=1EpPvsMKCD8:9u7AMqN52Eo:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/feldstudie/~4/1EpPvsMKCD8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.feldstudie.net/2013/05/05/dynamisches-setzen-von-node_env-fur-produktions-bzw-entwicklungsumgebung-mit-node-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<series:name><![CDATA[node.js]]></series:name>
	<feedburner:origLink>http://www.feldstudie.net/2013/05/05/dynamisches-setzen-von-node_env-fur-produktions-bzw-entwicklungsumgebung-mit-node-js/</feedburner:origLink></item>
		<item>
		<title>node.js – Probleme mit cluster modul unter Ubuntu</title>
		<link>http://feedproxy.google.com/~r/feldstudie/~3/EHWD9DCzS98/</link>
		<comments>http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/#comments</comments>
		<pubDate>Sat, 04 May 2013 13:29:32 +0000</pubDate>
		<dc:creator>Torsten</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[PHP / Javascript]]></category>
		<category><![CDATA[APT]]></category>
		<category><![CDATA[Cluster]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[socket.io]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[websocket]]></category>
		<guid isPermaLink="false">http://www.feldstudie.net/?p=3784</guid>
		<description><![CDATA[Vor ca. einer Woche habe ich angefangen mit Node.js zu arbeiten. Grund hierf&#252;r ist, dass ich f&#252;r das eine oder andere Projekt Daten in Echtzeit &#252;bertragen m&#246;chte. Da die Daten&#252;bertragung, wie z.B. bei PHP bzw. Web 2.0 Projekten, nicht nur vom Client aus initiiert werden sondern der Server diese beim Aktualisieren der Datens&#228;tze zum Client [...]]]></description>
				<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->Vor ca. einer Woche habe ich angefangen mit <a href="http://nodejs.org/">Node.js</a> zu arbeiten. Grund hierf&#252;r ist, dass ich f&#252;r das eine oder andere Projekt Daten in Echtzeit &#252;bertragen m&#246;chte. Da die Daten&#252;bertragung, wie z.B. bei PHP bzw. Web 2.0 Projekten, nicht nur vom Client aus initiiert werden sondern der Server diese beim Aktualisieren der Datens&#228;tze zum Client pushen soll, bin ich auf <a href="http://socket.io/">Socket.io</a> gesto&#223;en. Hier wird u.a. eine eigene Websocket-Implementierung verwendet, welche bidirektionale Kommunikation zwischen Server / Backend und Client erm&#246;glicht. Dies funktioniert sogar mit nahezu allen Browsern, da auf <a href="https://github.com/LearnBoost/socket.io-spec#transport-id">&#228;ltere / alternative Tranport-Mechanismen</a>, wie z.B. gew&#246;hnliche Websockets, flashsocket, jsonp-polling, etc., automatisch ausgewichen wird.</p>
<p>Da diese Projekte voraussichtlich gr&#246;&#223;er und somit eine vermeintlich hohe Anzahl an parallelen Socket-Verbindungen bedienen m&#252;ssen, habe ich mir das Cluster-Modul von Node.js angeschaut und in meine Projekte implementiert. Unter Windows, f&#252;r welches eine entsprechende Portierung vorliegt, lief meine app.js Problemlos. Nach dem Deploy auf ein Staging-System, konnte die app.js nicht mehr gestartet werden, da "cluster.worker" scheinbar nicht mehr definiert war. Auch Versuche mit anderen Cluster-Modulen schlugen fehl.</p><pre class="crayon-plain-tag">/var/www/slaw-dev/nodejs/app.js:68
        socket.emit('worker', 'This is worker #' + cluster.worker.id);
                                                                 ^
TypeError: Cannot read property 'id' of undefined
    at SocketNamespace.&lt;anonymous&gt; (/var/www/slaw-dev/nodejs/app.js:68:66)
    at SocketNamespace.$emit (events.js:88:20)
    at connect (/var/www/slaw-dev/nodejs/node_modules/socket.io/lib/namespace.js:292:10)
    at /var/www/slaw-dev/nodejs/node_modules/socket.io/lib/namespace.js:308:13
    at SocketNamespace.authorize (/var/www/slaw-dev/nodejs/node_modules/socket.io/lib/namespace.js:252:5)
    at SocketNamespace.handlePacket (/var/www/slaw-dev/nodejs/node_modules/socket.io/lib/namespace.js:302:14)
    at Manager.handleClient (/var/www/slaw-dev/nodejs/node_modules/socket.io/lib/manager.js:698:32)
    at Manager.handleUpgrade (/var/www/slaw-dev/nodejs/node_modules/socket.io/lib/manager.js:618:8)
    at Server.&lt;anonymous&gt; (/var/www/slaw-dev/nodejs/node_modules/socket.io/lib/manager.js:123:10)
    at Server.emit (events.js:88:20)</pre><p>Nachdem ich die Modul-Versionen unter Windows und Linux verglichen habe und keine Unterschiede feststellen konnte, habe ich im #node.js Channel im Freenode-IRC Hilfe gesucht. Nachdem sich einige den Code angeschaut haben (vielen Dank insbesondere an geNAZt (<a href="https://plus.google.com/104069934634275576044/about">Google+</a> / <a href="https://twitter.com/geNAZt">Twitter</a>), jedoch auch keine gravierenden Fehler gefunden haben, bin ich vorhin auf den Fehler gest0&#223;en:</p>
<p>W&#228;hrend ich unter Windows mittels dem, auf der Website bereitgestellten Installer, die neueste Version (0.10.5) von Node.js installiert habe, war auf dem Ubuntu noch eine Uralt-Version installiert. Dies liegt daran, dass in den normalen APT-Repositories lediglich das Paket nodejs-dev in der Version 0.6.12 vorhanden ist, welche nicht das neueste Cluster-Modul beinhaltet. Um die neueste Version zu erhalten, m&#252;ssen zuerst folgende Schritte ausgef&#252;hrt werden:</p><pre class="crayon-plain-tag">sudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs</pre><p></p>
<ul>
<li>python-software-properties ist f&#252;r den Befehl add-apt-repository erforderlich und ist scheinbar standardm&#228;&#223;ig nicht installiert</li>
<li>anschlie&#223;end wird das Repository ppa:chris-lea/node.js hinzugef&#252;gt und</li>
<li>ein Update der Repositories durchgef&#252;hrt</li>
<li>zuletzt installiert man dann das Paket nodejs, welches nun in der neuesten Version (0.10.5) vorliegt.</li>
</ul>
<p><img class="alignright size-full wp-image-3787" alt="2013-05-04_15-25-25" src="http://www.feldstudie.net/wp-content/uploads/2013/05/2013-05-04_15-25-25.png" width="131" height="32" /></p>
<p>Nach dem Starten der App und dem Aufbau einer Socket-Verbindung vom Client / Browser, wird nun die ID des entsprechenden Workers korrekt angezeigt.<br />
<hr />
<h2>Kommentare</h2>
<ul>
<li><a href="http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/">5. May 2013</a>, <a href='http://www.feldstudie.net/2013/05/05/dynamisches-setzen-von-node_env-fur-produktions-bzw-entwicklungsumgebung-mit-node-js/' rel='external nofollow' class='url'>Dynamisches Setzen von NODE_ENV für Produktions- bzw. Entwicklungsumgebung mit Node.js&nbsp;|&nbsp;Feldstudie.net</a> schreiben: [...] auch produktiv l&#228;uft, um Betriebssystem-abh&#228;ngige Fehler auszuschlie&#223;en (siehe z.B. diesen Beitrag). W&#252;rde ich also auf diesem System f&#252;r die Umgebungsvariable NODE_ENV auf &#039;production&#039; [...]</li>
</ul>
<hr />
<h2>Ähnliche Beiträge:</h2>
<ul>
<li><a href="http://www.feldstudie.net/2013/05/05/dynamisches-setzen-von-node_env-fur-produktions-bzw-entwicklungsumgebung-mit-node-js/" rel="bookmark" title="Permanent Link: Dynamisches Setzen von NODE_ENV f&#252;r Produktions- bzw. Entwicklungsumgebung mit Node.js">Dynamisches Setzen von NODE_ENV f&#252;r Produktions- bzw. Entwicklungsumgebung mit Node.js</a></li>
<li><a href="http://www.feldstudie.net/2009/02/27/interesse-an-ubuntu/" rel="bookmark" title="Permanent Link: Interesse an Ubuntu?">Interesse an Ubuntu?</a></li>
<li><a href="http://www.feldstudie.net/2007/12/21/images-unter-ubuntu-konvertieren/" rel="bookmark" title="Permanent Link: Images unter Ubuntu konvertieren">Images unter Ubuntu konvertieren</a></li>
<li><a href="http://www.feldstudie.net/2007/11/09/kurznews-2007-11-09/" rel="bookmark" title="Permanent Link: Kurznews 2007-11-09">Kurznews 2007-11-09</a></li>
<li><a href="http://www.feldstudie.net/2008/06/01/probleme-mit-ladezeit-der-seite/" rel="bookmark" title="Permanent Link: Probleme mit Ladezeit der Seite">Probleme mit Ladezeit der Seite</a></li>
</ul>
<hr /><small>Copyright &copy; 2008 by <a href="http://www.feldstudie.net" title="Feldstudie.net">Feldstudie.net</a> - (Digital Fingerprint: 28dc32f28bc4317f666dd03761cded9e (74.125.182.28) )</small>
<div class="shr-publisher-3784"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/' data-shr_title='node.js+-+Probleme+mit+cluster+modul+unter+Ubuntu'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/' data-shr_title='node.js+-+Probleme+mit+cluster+modul+unter+Ubuntu'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/' data-shr_title='node.js+-+Probleme+mit+cluster+modul+unter+Ubuntu'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/feldstudie?a=EHWD9DCzS98:0P0l9BHBe8s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=EHWD9DCzS98:0P0l9BHBe8s:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/feldstudie?i=EHWD9DCzS98:0P0l9BHBe8s:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=EHWD9DCzS98:0P0l9BHBe8s:2nqncYFp4_M"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=2nqncYFp4_M" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=EHWD9DCzS98:0P0l9BHBe8s:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/feldstudie/~4/EHWD9DCzS98" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<series:name><![CDATA[node.js]]></series:name>
	<feedburner:origLink>http://www.feldstudie.net/2013/05/04/node-js-probleme-mit-cluster-modul-unter-ubuntu/</feedburner:origLink></item>
		<item>
		<title>Eigene Subdomain für SSL Verschlüsselung mit Codeigniter</title>
		<link>http://feedproxy.google.com/~r/feldstudie/~3/hHKEyWLIVjQ/</link>
		<comments>http://www.feldstudie.net/2013/04/02/eigene-subdomain-fur-ssl-verschlusselung-mit-codeigniter/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 15:05:30 +0000</pubDate>
		<dc:creator>Torsten</dc:creator>
				<category><![CDATA[Blog / Website]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[base_url]]></category>
		<category><![CDATA[Codeigniter]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[SSL]]></category>
		<guid isPermaLink="false">http://www.feldstudie.net/?p=3767</guid>
		<description><![CDATA[Ich m&#246;chte f&#252;r ein neues Web-Projekt CloudFlare nutzen, welcher nahezu transparent Caching, CDN-Funktionalit&#228;t als auch DDoS-Schutz bietet. Da das Projekt jedoch noch in den Kinderschuhen steckt, w&#228;re die Pro-Variante mit einem Preis von 20$ / Monat etwas &#252;bertrieben. Einer der Nachteile der kostenfreien Version ist jedoch, dass SSL nicht unterst&#252;tzt wird und alle Besucher welche [...]]]></description>
				<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->Ich m&#246;chte f&#252;r ein neues Web-Projekt CloudFlare nutzen, welcher nahezu transparent Caching, CDN-Funktionalit&#228;t als auch DDoS-Schutz bietet. Da das Projekt jedoch noch in den Kinderschuhen steckt, w&#228;re die Pro-Variante mit einem Preis von 20$ / Monat etwas &#252;bertrieben. Einer der Nachteile der kostenfreien Version ist jedoch, dass SSL nicht unterst&#252;tzt wird und alle Besucher welche die Seite &#252;ber SSL (https) aufrufen w&#252;rden, bek&#228;men eine Fehlermeldung. Da jedoch Anmeldedaten (Benutzername und Passwort) &#252;bertragen werden sollen, w&#228;re mir zumindest eine optionale M&#246;glichkeit der Verschl&#252;sselung sehr recht.</p>
<p>Ich habe mich daher f&#252;r die folgende L&#246;sung entschieden: standardm&#228;&#223;ig wird die Seite &#252;ber die normale Domain aufgerufen, welche &#252;ber CloudFlare gesch&#252;tzt wird. M&#246;chte ein Besucher jedoch explizit SSL-Verschl&#252;sselung nutzen, wird er auf die Subdomain "secure.domain.de" umgeleitet, welche per SSL gesch&#252;tzt ist (hierauf gehe ich genauer ein, sobald die Domain bei einem neuen Provider und die Konfiguration bei CloudFlare abgeschlossen ist).</p>
<p><span id="more-3767"></span>Die Herausforderung bei dieser L&#246;sung ist, dass die Codeigniter-Instanz sowohl &#252;ber die Subdomain als auch &#252;ber die Hauptdomain erreichbar sein und die Subdomain die SSL-Verschl&#252;sselung forcieren muss. Um dies zu erreichen habe ich die base_url Konfigurationsvariable in der config.php der Codeigniter-Instanz entsprechend variable gestaltet. Beim Aufruf der Seite wird nun &#252;berpr&#252;ft, ob die Subdomain "secure" verwendet wird. Falls ja, wird dem http der base_url ein "s" hinzugef&#252;gt, so dass der Webserver bzw. der Browser eine SSL-Verschl&#252;sselung benutzt. Bei keiner oder jeglicher anderer Subdomain, wird mit http gearbeitet. Den Auszug der config.php findet Ihr hier:</p>
<p><script src="https://gist.github.com/5292796.js"></script><noscript><p>View the code on <a href="https://gist.github.com/5292796">Gist</a>.</p></noscript></p>
<hr />
<h2>Ähnliche Beiträge:</h2>
<ul>
<li><a href="http://www.feldstudie.net/2009/10/17/honeypot-fuer-webcrawler-e-mail-und-kommentarspammer/" rel="bookmark" title="Permanent Link: Honeypot f&#252;r Webcrawler, E-Mail- und Kommentarspammer">Honeypot f&#252;r Webcrawler, E-Mail- und Kommentarspammer</a></li>
<li><a href="http://www.feldstudie.net/2009/07/21/su-fuer-benutzer-ohne-shellzuweisung/" rel="bookmark" title="Permanent Link: SU f&#252;r Benutzer ohne Shellzuweisung">SU f&#252;r Benutzer ohne Shellzuweisung</a></li>
<li><a href="http://www.feldstudie.net/2012/04/05/picdump-05-04-12/" rel="bookmark" title="Permanent Link: Picdump 05.04.12">Picdump 05.04.12</a></li>
<li><a href="http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/" rel="bookmark" title="Permanent Link: Wider den Papierkrieg &#8211; Outsourcing als Aktenmanagement- und Archivierungsl&#246;sung">Wider den Papierkrieg &#8211; Outsourcing als Aktenmanagement- und Archivierungsl&#246;sung</a></li>
<li><a href="http://www.feldstudie.net/2009/12/25/patch-fuer-kaspersky-anti-virus-fuer-windows-server-mp4-zur-beseitigung-der-performanceprobleme-2/" rel="bookmark" title="Permanent Link: Patch f&#252;r Kaspersky Anti-Virus f&#252;r Windows Server MP4 zur Beseitigung der Performanceprobleme">Patch f&#252;r Kaspersky Anti-Virus f&#252;r Windows Server MP4 zur Beseitigung der Performanceprobleme</a></li>
</ul>
<hr /><small>Copyright &copy; 2008 by <a href="http://www.feldstudie.net" title="Feldstudie.net">Feldstudie.net</a> - (Digital Fingerprint: 28dc32f28bc4317f666dd03761cded9e (74.125.182.28) )</small>
<div class="shr-publisher-3767"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http://www.feldstudie.net/2013/04/02/eigene-subdomain-fur-ssl-verschlusselung-mit-codeigniter/' data-shr_title='Eigene+Subdomain+f%C3%BCr+SSL+Verschl%C3%BCsselung+mit+Codeigniter'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http://www.feldstudie.net/2013/04/02/eigene-subdomain-fur-ssl-verschlusselung-mit-codeigniter/' data-shr_title='Eigene+Subdomain+f%C3%BCr+SSL+Verschl%C3%BCsselung+mit+Codeigniter'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http://www.feldstudie.net/2013/04/02/eigene-subdomain-fur-ssl-verschlusselung-mit-codeigniter/' data-shr_title='Eigene+Subdomain+f%C3%BCr+SSL+Verschl%C3%BCsselung+mit+Codeigniter'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/feldstudie?a=hHKEyWLIVjQ:1EGtldeyJGI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=hHKEyWLIVjQ:1EGtldeyJGI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/feldstudie?i=hHKEyWLIVjQ:1EGtldeyJGI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=hHKEyWLIVjQ:1EGtldeyJGI:2nqncYFp4_M"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=2nqncYFp4_M" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=hHKEyWLIVjQ:1EGtldeyJGI:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/feldstudie/~4/hHKEyWLIVjQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.feldstudie.net/2013/04/02/eigene-subdomain-fur-ssl-verschlusselung-mit-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<series:name><![CDATA[PHP / Javascript]]></series:name>
	<feedburner:origLink>http://www.feldstudie.net/2013/04/02/eigene-subdomain-fur-ssl-verschlusselung-mit-codeigniter/</feedburner:origLink></item>
		<item>
		<title>Wider den Papierkrieg – Outsourcing als Aktenmanagement- und Archivierungslösung</title>
		<link>http://feedproxy.google.com/~r/feldstudie/~3/BpmwVoc2I_o/</link>
		<comments>http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/#comments</comments>
		<pubDate>Fri, 15 Feb 2013 12:54:07 +0000</pubDate>
		<dc:creator>Torsten</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Aktenmanagement]]></category>
		<category><![CDATA[Archvierung]]></category>
		<category><![CDATA[Iron Mountain]]></category>
		<category><![CDATA[Lösung]]></category>
		<category><![CDATA[Oursourcing]]></category>
		<guid isPermaLink="false">http://www.feldstudie.net/?p=3756</guid>
		<description><![CDATA[Privatpersonen kennen es, Unternehmer f&#252;rchten es: Aktenmanagement und -archivierung Wer ein kleines Unternehmen betreibt oder Privatperson ist, kennt es: ein kleiner Raum, ggf. sogar das eigene Arbeitszimmer mit Schr&#228;nken voller Aktenordner. Je gr&#246;&#223;er jedoch der Betrieb, desto gr&#246;&#223;er meist auch der Wust an eben jenen Akten. Wem die eigene Archivierung, gerade in Hinsicht auf die [...]]]></description>
				<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->Privatpersonen kennen es, Unternehmer f&#252;rchten es: Aktenmanagement und -archivierung</p>
<p>Wer ein kleines Unternehmen betreibt oder Privatperson ist, kennt es: ein kleiner Raum, ggf. sogar das eigene Arbeitszimmer mit Schr&#228;nken voller Aktenordner. Je gr&#246;&#223;er jedoch der Betrieb, desto gr&#246;&#223;er meist auch der Wust an eben jenen Akten. Wem die eigene Archivierung, gerade in Hinsicht auf die gesetzliche Vorhaltezeit und den damit verbundenen Platz &#252;ber den Kopf w&#228;chst, sollte sich &#252;ber einen entsprechenden Outsourcing-Dienst im Bereich Aktenmanagement und -archivierung <a href="http://www.ironmountain.de/unsereservices/aktenmanagement-und-archivierung.asp">Gedanken machen</a>.</p>
<p>Die Vorteile sind meist eindeutig: Die selbst verpackten Akten werden von dem Dienstleister oder einer entsprechenden Spedition abgeholt und zu einer der sicheren Einrichtungen, welche teils mehrere Sicherheitsstufen inkl. Zugriffssteuerung, computergest&#252;tzte Kontrollsysteme, l&#252;ckenlose Nachweisketten, etc. bieten, gebracht werden. Dabei verliert man jedoch nicht die Kontrolle &#252;ber seine Daten. Die meisten Dienstleister setzen alles daran, die Aktenlagerung so einfach wie m&#246;glich zu gestalten: archivierte Dokumente stehen nach der Einlagerung digital zur Verf&#252;gung oder k&#246;nnen als Original innerhalb eines oder sogar eines halben Werktags per (Eil)Kurier abgeholt werden.</p>
<p>Das Unternehmen Iron Mountain ist sogar aufgrund der Verwendung eines selbst entwickelten Systems, welches mit Hilfe von <a title="Jetzt habe auch ich QR codes f&#252;r mich entdeckt" href="http://www.feldstudie.net/2011/10/18/jetzt-habe-auch-ich-qr-codes-fur-mich-entdeckt/">Barcodes</a> arbeitet, in der Lage, angeforderte Dokumente schneller zu scannen und zu &#252;bermitteln, als vor Ort ein Papierdokument aus einem Aktenraum geholt werden kann. &#220;ber ihr webbasiertes Archivmanagement-Portal k&#246;nnen der Kunde bequem auf seine aktiv genutzten Unterlagen zugreifen und beh&#228;lt auf diese Weise stets den &#220;berblick. Sollte der Kunde jedoch lieber die Daten im eigenen Haus behalten wollen, bietet Iron Mountain an, ein effizientes und den Vorschriften entsprechendes Programm zu erstellen.<br />
<hr />
<h2>Kommentare</h2>
<ul>
<li><a href="http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/">15. February 2013</a>, <a href='http://sarinamainz.tumblr.com/' rel='external nofollow' class='url'>Yager</a> schreiben: So ein dienst kann echt nützlich sein. Als Onlinehändler weis ich wie schnell der halbe Keller voll mit Ordnern ist.</li>
<li><a href="http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/">27. February 2013</a>, <a href='http://lisalustich.blog.com/' rel='external nofollow' class='url'>Patrick</a> schreiben: Vorallem lagern die Akten so sicherer als im eigenen Haus. Einbrecher sind schnell drinn und ein Brand zerstört auch alles in sekunden, wenn man pech hat.</li>
<li><a href="http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/">14. March 2013</a>, <a href='http://cpu-ag.com' rel='external nofollow' class='url'>cpu</a> schreiben: Interessante Variante der Archivierung. Bisher kannten wir nur neben der traditionellen Aktenablage für die Altbestände, die Ablage in einem Dokumentenmanagementsystem, welches bei uns seit  zwei Jahren im Einatz ist. Damit hat sich zwar einiges gebessert, aber dennoch hilft uns das nicht bei der Suche in den Altbeständen. Vielleicht ist das hier eine gute Möglichkeit.;natürlich ist das auch eine Frage der Kosten.</li>
<li><a href="http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/">5. April 2013</a>, <a href='http://www.wasserkocher-entkalken123.de' rel='external nofollow' class='url'>Dani Wasseran</a> schreiben: Das klingt echt interessant. Habe von dieser Möglichkeit noch nichts gehört. Werde mich darüber mal erkundigen und mal schauen ob das meine aktuelle Methode ablöst
<p>Gruß Dani</li>
<li><a href="http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/">11. April 2013</a>, <a href='http://www.bekawe-systems.de' rel='external nofollow' class='url'>Der Computer Engel</a> schreiben: Ich hab mich da jetzt mal mit befasst, weil ich sowas in der Art suche. Eine sehr interessante Lösung, aber wohl eher nur für Akten in Form von z.B. Kundenunterlagen oder Projekt-Unterlagen bzw. Verträge zu gebrauchen. Sicherlich kann man auch die komplette Buchhaltung so realisieren lassen, aber ich denke, die Kosten stehen in keinem Verhältnis zum Nutzen.
<p>Leider verschwinden die ganzen Firmen, wo man seine normalen Hefter/Ordner einlagern lassen konnte immer mehr vom Markt, sonst hätte ich meine Aktenberge einfach so altmodisch in fremde Hände zur Aufbewahrung gegeben,</li>
<li><a href="http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/">26. April 2013</a>, <a href='http://www.blackshirt-company.de/' rel='external nofollow' class='url'>Else</a> schreiben: Das kann sich wirklich lohnen, wenn man überlegt das mein Steuerberater den Dachstuhl vom Nachbar angemietet hat und auch sein eigener Keller und Dachboden komplett voll steht mit Akten und Ordnern.</li>
</ul>
<hr />
<h2>Ähnliche Beiträge:</h2>
<ul>
<li><a href="http://www.feldstudie.net/2009/10/04/speedtest-schaffst-du-mehr-als-84-woerter-die-minute/" rel="bookmark" title="Permanent Link: Speedtest &#8211; Schaffst Du mehr als 86 W&#246;rter die Minute?">Speedtest &#8211; Schaffst Du mehr als 86 W&#246;rter die Minute?</a></li>
<li><a href="http://www.feldstudie.net/2008/08/12/umfrage-bannerrotation-ja-oder-nein/" rel="bookmark" title="Permanent Link: [Umfrage] Bannerrotation &#8211; ja oder nein?">[Umfrage] Bannerrotation &#8211; ja oder nein?</a></li>
<li><a href="http://www.feldstudie.net/2008/01/06/wider-das-adler-suchsystem/" rel="bookmark" title="Permanent Link: Wider das Adler-Suchsystem">Wider das Adler-Suchsystem</a></li>
<li><a href="http://www.feldstudie.net/2009/12/30/storebird-de-verschenkt-artikel-an-blogger/" rel="bookmark" title="Permanent Link: Storebird.de verschenkt Artikel an Blogger">Storebird.de verschenkt Artikel an Blogger</a></li>
<li><a href="http://www.feldstudie.net/2009/07/26/fotobuch-von-fujifilm/" rel="bookmark" title="Permanent Link: Fotobuch von FujiFilm">Fotobuch von FujiFilm</a></li>
</ul>
<hr /><small>Copyright &copy; 2008 by <a href="http://www.feldstudie.net" title="Feldstudie.net">Feldstudie.net</a> - (Digital Fingerprint: 28dc32f28bc4317f666dd03761cded9e (74.125.182.28) )</small>
<div class="shr-publisher-3756"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/' data-shr_title='Wider+den+Papierkrieg+-+Outsourcing+als+Aktenmanagement-+und+Archivierungsl%C3%B6sung'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/' data-shr_title='Wider+den+Papierkrieg+-+Outsourcing+als+Aktenmanagement-+und+Archivierungsl%C3%B6sung'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/' data-shr_title='Wider+den+Papierkrieg+-+Outsourcing+als+Aktenmanagement-+und+Archivierungsl%C3%B6sung'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/feldstudie?a=BpmwVoc2I_o:8nciKT5ulro:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=BpmwVoc2I_o:8nciKT5ulro:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/feldstudie?i=BpmwVoc2I_o:8nciKT5ulro:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=BpmwVoc2I_o:8nciKT5ulro:2nqncYFp4_M"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=2nqncYFp4_M" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=BpmwVoc2I_o:8nciKT5ulro:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/feldstudie/~4/BpmwVoc2I_o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.feldstudie.net/2013/02/15/wider-den-papierkrieg-outsourcing-als-aktenmanagement-und-archivierungslosung/</feedburner:origLink></item>
		<item>
		<title>‘undefined’ nach form submit mit Code Igniter und jQuery mobile</title>
		<link>http://feedproxy.google.com/~r/feldstudie/~3/58CE-XU2sqY/</link>
		<comments>http://www.feldstudie.net/2012/12/29/undefined-nach-form-submit-mit-code-igniter-und-jquery-mobile/#comments</comments>
		<pubDate>Sat, 29 Dec 2012 21:29:21 +0000</pubDate>
		<dc:creator>Torsten</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[PHP / Javascript]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Code Igniter]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[form_open]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Html5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery Mobile]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[undefined]]></category>
		<category><![CDATA[View]]></category>
		<guid isPermaLink="false">http://www.feldstudie.net/?p=3746</guid>
		<description><![CDATA[Aktuell arbeite ich an einem neuen Webprojekt, bei welchem ich zum ersten Mal mit dem PHP Framework Code Igniter und jQuery Mobile arbeite. Nach einigen Anlaufschwierigkeiten, komme ich nun recht gut voran, wobei ich nur jedem empfehlen kann, nicht mit zwei unbekannten Sprachen / Frameworks zu starten. Ein Problem hat mir jedoch heute den letzten [...]]]></description>
				<content:encoded><![CDATA[<p><!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->Aktuell arbeite ich an einem neuen Webprojekt, bei welchem ich zum ersten Mal mit dem PHP Framework Code Igniter und jQuery Mobile arbeite. Nach einigen Anlaufschwierigkeiten, komme ich nun recht gut voran, wobei ich nur jedem empfehlen kann, nicht mit zwei unbekannten Sprachen / Frameworks zu starten. Ein Problem hat mir jedoch heute den letzten Nerv geraubt. Um es selbst demn&#228;chst nochmal nachschlagen zu k&#246;nnen und auch andere von meinen Fehler profitieren zu lassen, hier das Problem und die entsprechende L&#246;sung:</p>
<p>In meinem Controller habe ich eine Methode signup, welche bei dem ersten Aufruf lediglich die view des Registrierungsformulars l&#228;dt und anzeigt. Im header view werden lediglich die jQuery Mobile js Sources geladen, der meta viewport und das Charset f&#252;r die Seite bestimmt. Zu Beginn habe ich, wie von Code Igniter gewohnt, das Formular &#252;ber &lt;?php echo form_open('user/signup'); ?&gt; ge&#246;ffnet und dann mittels jQuery Mobile das Formular erstellt. Mein Problem war nun, dass nach dem Absenden des Formulars, der &#220;bergabe der Post-Werte an die signup Methode des Controllers und der Formular-Validierung, ich lediglich ein 'undefined' angezeigt bekommen habe. Die Suche nach der Ursache hat mich fast den halben Nachmittag gekostet. Nach einiger Recherche &#252;ber Google und viele 'nicht-weiterhelfende' Forenbeitr&#228;ge sp&#228;ter, stie&#223; ich zuf&#228;llig auf ein Problem in Verbindung mit Ajax.</p>
<p>Hier fiel mir dann auf, dass man bei jQuery Mobile Formularen explizit angeben muss, wenn ein Formular _nicht_ &#252;ber Ajax gesendet werden soll; und hier war der Fehler. &#220;ber data-ajax="false" im Form-Tag kann dieses Verhalten deaktiviert werden. Bei Code Igniter kann dies &#252;ber den zweiten Parameter der form_open() Funktion als Array mitgegeben werden werden, so dass das dann wie folgt aussieht: &lt;?php echo form_open('user/signup', array('data-ajax' =&gt; 'false')); ?&gt;. Die entsprechenden Ausschnitte aus Controller, Model und View findet Ihr im folgenden Gist:<span id="more-3746"></span></p>
<p><script src="https://gist.github.com/4409393.js"></script><noscript><p>View the code on <a href="https://gist.github.com/4409393">Gist</a>.</p></noscript></p>
<hr />
<h2>Ähnliche Beiträge:</h2>
<ul>
<li><a href="http://www.feldstudie.net/2009/04/22/firmware-update-fuer-huawei-e160-und-neue-version-von-mobile-partner/" rel="bookmark" title="Permanent Link: Firmware Update f&#252;r Huawei E160 und neue Version von Mobile Partner">Firmware Update f&#252;r Huawei E160 und neue Version von Mobile Partner</a></li>
<li><a href="http://www.feldstudie.net/2008/06/09/tutorial-hinzufgen-einer-weiteren-sidebar-mit-tabs-zu-einem-wordpress-theme/" rel="bookmark" title="Permanent Link: [Tutorial] Hinzuf&uuml;gen einer weiteren Sidebar mit Tabs zu einem WordPress-Theme">[Tutorial] Hinzuf&uuml;gen einer weiteren Sidebar mit Tabs zu einem WordPress-Theme</a></li>
<li><a href="http://www.feldstudie.net/2012/11/29/anzeigen-von-post-parametern-uber-javascript-vor-dem-absenden-des-formulars-uber-submit/" rel="bookmark" title="Permanent Link: Anzeigen von Post-Parametern &#252;ber Javascript vor dem Absenden des Formulars &#252;ber Submit">Anzeigen von Post-Parametern &#252;ber Javascript vor dem Absenden des Formulars &#252;ber Submit</a></li>
<li><a href="http://www.feldstudie.net/2008/05/28/projekt-waposphre-teil-2/" rel="bookmark" title="Permanent Link: Projekt &quot;WAPosph&auml;re&quot; &#8211; Teil 2">Projekt &quot;WAPosph&auml;re&quot; &#8211; Teil 2</a></li>
<li><a href="http://www.feldstudie.net/2011/10/18/jetzt-habe-auch-ich-qr-codes-fur-mich-entdeckt/" rel="bookmark" title="Permanent Link: Jetzt habe auch ich QR codes f&#252;r mich entdeckt">Jetzt habe auch ich QR codes f&#252;r mich entdeckt</a></li>
</ul>
<hr /><small>Copyright &copy; 2008 by <a href="http://www.feldstudie.net" title="Feldstudie.net">Feldstudie.net</a> - (Digital Fingerprint: 28dc32f28bc4317f666dd03761cded9e (74.125.182.28) )</small>
<div class="shr-publisher-3746"></div>
<p><!-- Start Shareaholic LikeButtonSetBottom Automatic -->
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http://www.feldstudie.net/2012/12/29/undefined-nach-form-submit-mit-code-igniter-und-jquery-mobile/' data-shr_title='%27undefined%27+nach+form+submit+mit+Code+Igniter+und+jQuery+mobile'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http://www.feldstudie.net/2012/12/29/undefined-nach-form-submit-mit-code-igniter-und-jquery-mobile/' data-shr_title='%27undefined%27+nach+form+submit+mit+Code+Igniter+und+jQuery+mobile'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http://www.feldstudie.net/2012/12/29/undefined-nach-form-submit-mit-code-igniter-und-jquery-mobile/' data-shr_title='%27undefined%27+nach+form+submit+mit+Code+Igniter+und+jQuery+mobile'></a></div>
<div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div>
<p><!-- End Shareaholic LikeButtonSetBottom Automatic --><!-- Start Shareaholic Recommendations Automatic --><!-- End Shareaholic Recommendations Automatic --></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/feldstudie?a=58CE-XU2sqY:292QadmJle0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=58CE-XU2sqY:292QadmJle0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/feldstudie?i=58CE-XU2sqY:292QadmJle0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=58CE-XU2sqY:292QadmJle0:2nqncYFp4_M"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=2nqncYFp4_M" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/feldstudie?a=58CE-XU2sqY:292QadmJle0:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/feldstudie?d=I9og5sOYxJI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/feldstudie/~4/58CE-XU2sqY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.feldstudie.net/2012/12/29/undefined-nach-form-submit-mit-code-igniter-und-jquery-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<series:name><![CDATA[PHP / Javascript]]></series:name>
	<feedburner:origLink>http://www.feldstudie.net/2012/12/29/undefined-nach-form-submit-mit-code-igniter-und-jquery-mobile/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 2.923 seconds. --><!-- Cached page generated by WP-Super-Cache on 2013-05-17 09:06:24 --><!-- Compression = gzip -->
