Archiv für Januar 2009

27
Jan

Berechtigungen für ein zentrales Git Repository

Mein erstes Git Repository auf dem Server war schnell erstellt:sudo mkdir -p /var/git/netzpiraten.gitcd /var/git/netzpiraten.gitgit –bare init –shared=group… und schon konnte ich loslegen …

git clone ssh://www.netzpiraten.ch/var/git/netzpiraten.gitcd netzpiratentouch testgit add testgit commit -a -m "Adding first file"git push origin master

… und hatte wirklich nie irgend welche Probleme mit dem zentralen Repository auf dem Server.Ein paar Monate später wurden auch in der Firma alle Subversion Repositories auf Git umgestellt und das lief auch ein Weilchen ohne Probleme, bis eines Tages folgende Fehlermeldung aufgetreten ist:

Counting objects: 31, done.Compressing objects: 100% (20/20), done.Writing objects: 100% (22/22), 239.64 KiB, done.Total 22 (delta 7), reused 0 (delta 0)error: unable to write sha1 filename ./objects/1c/1d505f3a585b9e7d298eb9477ab07c5ea79aea: Permission deniedfatal: failed to write objecterror: unpack failed: unpacker exited with error codeTo ssh://git.screenconcept.ch/var/git/repository.git ! [remote rejected] master -> master (n/a (unpacker error))

Also nichts wie auf den Server um das Repository etwas genauer zu inspizieren.Zum Glück konnte der Fehler schnell gefunden werden: Ich hatte vergessen auf den Git Repositories das Setgid Flag zu setzten, womit neue Dateien nicht der Git Gruppe gehörten sondern der Hauptgruppe des Benutzers. Klar das eine anderer Benutzer diese nun nicht einfach so überschreiben kann.Also schnell den Missstand korrigieren:

sudo chown -R :git /var/git
sudo find /var/git -type d | xargs chmod ug+rwx,g+s

… und jetzt kann wieder gemeinsam gearbeitet werden.

Man merke sich also folgendes für das Erstellen eines zentralen Git Repository:
  • Git Repository Verzeichnis erstellen
  • Das Verzeichnis der Gruppe ‘git’ zuweisen
  • Auf dem Verzeichnis das Setgid Flag setzten
  • Git Repository initialisieren

oder anders formuliert

sudo mkdir /var/git/repository.git
sudo chown :git /var/git/repository.git
sudo chmod ug+rwx,g+s /var/git/repository.git
sudo git init --bare /var/git/repository.git

… und nicht vergessen, Git macht am meisten Spass, wenn man auf GitHub teilt.

13
Jan

AJAX Formular mit Anker in der URL versenden

Ein normales HTML Formular kann mit Prototype JS sehr einfach mittels AJAX versendet werden. Dazu wird ganz einfach ein normales Formular erstellt:


<form id="myform" method="post" action="/controller">
   <input type="text" name="firstname" />
   <input type="text" name="lastname" />
   ...
   <input type="button" onclick="sendForm();" value="Versenden"/>
</form>

Nun kann mit relativ wenig Code das Formular versendet werden:


function sendForm() {
   $('myform').request({
      onSuccess: function(transport) {
         ...
      },
      onFailure: function(transport) {
         ...
      }
 });
}

Genau das wollte ich heute mit einem Formular in Radiant CMS machen, welcher ein Mail mit der Mailer-Erweiterung versendet. Damit das ganze noch etwas eleganter daherkommt, wird das Formular in einem Fenster mit Prototype Window dargestellt. Das funktioniert auch wunderbar, doch der obligate Test mit dem verstaubten Internet Explorer war leider einmal mehr nicht erfolgreich. Der Explorer konnte das Fomular nicht fehlerfrei versenden.

Nach einer Analyse der HTTP Anfragen kam zu Tage, dass durch die Darstellung des Formulares in einer Dialogbox (dessen Inhalt selber wiederum mit AJAX geladen wird), die URL zum Mailer-Kontroller einen HTML Anker enthielt:


/pages/25/mailer#mail

Irgendwie kommt der IE mit einem Anker in der Zielurl ganz und gar nicht klar. Nach ein wenig herumexperimentieren blieb mir nichts anderes übrig, als die URL selber aus dem Formular zu holen, den Anker daraus zu entfernen und erst dann das Formular zu versenden:


var url = $('myform').action;
var anchor = url.indexOf('#');
if (anchor != -1) {
   url = url.substring(0, anchor);
}
new Ajax.Request(url , {
   method: 'post',
   parameters: Form.serialize('myform'),
   onSuccess: function(transport) {
      ...
   },
   onFailure: function(transport) {
      ...
   }
});

Wieder einmal mehr wird durch den Explorer ein Stück eleganter Code zu einem komischen Rumgebastel. Internet Explorer - ohne dich würde die Webentwicklung wirklich Spass machen!




Januar 2009
M D M D F S S
« Okt   Mrz »
 1234
567891011
12131415161718
19202122232425
262728293031  

Werbung


Buttonitis