2011-08-24 8 views
53

Ho una pagina demo di github.com che collega a https://raw.github.com/.../master/.../file.js in modo che Non è necessario copiare sempre il file .js sul ramo gh-pages ogni volta che viene modificato. Questo funziona in tutti i browser tranne IE che si lamenta:Inclusi js da raw.github.com

SEC7112: Script da https://raw.github.com/cwolves/jQuery-iMask/master/dist/jquery-imask-min.js è stato bloccato a causa di tipo MIME non corrispondente

La denuncia viene dal fatto che il file viene trasferito con:

X-Content-Type-Options: nosniff 
Content-Type: text/plain 

che non posso cambiare.

Qualcuno ha qualche idea su come realizzare questa stessa cosa? In qualche modo mi permette di collegarmi al file nel ramo master senza doverlo sempre spingere al ramo gh-pages?

pagina attuale: http://cwolves.github.com/jQuery-iMask/

(Minor update - Ho cambiato il GH-pagine in questo caso esatto di includere il file .js, in modo da IE non è rotto, ma desidera comunque tutte le risposte :))

risposta

14

Non posso aiutarti con l'IE ingannevole, e penso che da quel punto di vista ciò che stai cercando è impossibile (e scoraggiato, poiché questo non è lo scopo degli URL grezzi di Github).

Tuttavia, è possibile automatizzare l'invio delle modifiche a gh-pages e premere per semplificare la vita. È possibile farlo con un post-commit hook per aggiornare automaticamente i file rilevanti nel ramo gh-pages. Ho cucinato un tale script post-commit che guarda per le modifiche a determinati file e li impegna a un altro ramo:

#!/bin/sh 

WATCH_BRANCH="master" 
WATCH_FILES="jquery-imask-min.js" 
DEST_BRANCH="gh-pages" 

# bail out if this commit wasn't made in the watched branch 
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'); 
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then 
    exit 0 
fi 

# only update if watched files have changed in the latest commit 
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH) 
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then 
    # checkout destination branch, then 
    # checkout latest version of each watched file and add to index 
    git checkout -q $DEST_BRANCH 
    git pull -q 
    SAVEIFS=$IFS 
    IFS=$(echo -n "|") 
    for file in $WATCH_FILES; do 
    git checkout $WATCH_BRANCH -- $file 
    git add $file > /dev/null 
    done 
    IFS=$SAVEIFS 
    # commit with a chance to edit the message, then go back to watched branch 
    LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH) 
    git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT" 
    git push origin $DEST_BRANCH 
    git checkout -q $WATCH_BRANCH 
fi 

Si noti che questo è uno script in generale, anche se ho specificato il config vars in alto per la vostra scopi. $WATCH_FILES può essere impostato su un elenco di file delimitati dalle parentesi graffe | come index.html|js/jquery.js. I percorsi devono essere specificati in relazione alla radice del repository.

Fatemi sapere se avete domande e se lo script vi aiuta!

5

Gli URL grezzi di Github non sono progettati per essere un host Web generico. Spingi quella roba nell'host corretto, come ad esempio pages.github.com.

+2

Sì, il problema è che richiede un lavoro extra ogni volta che eseguo un commit su master per passare al branch delle pagine e copiare i file. Sto solo cercando di evitare questo dato che sembra inutile –

0

Sto anche cercando di raggiungere questo obiettivo. Tuttavia, non riesco a trovare la soluzione di @shelhamer per funzionare nella mia base di codice. Qui di seguito è il post-commit hook script aggiornato che ho usato per farlo funzionare:

#!/bin/sh 

WATCH_BRANCH="master" 
WATCH_FILES="jquery-imask-min.js" 
DEST_BRANCH="gh-pages" 

# bail out if this commit wasn't made in the watched branch 
THIS_BRANCH=$(git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'); 
if [ "$THIS_BRANCH" != "$WATCH_BRANCH" ]; then 
    exit 0 
fi 

# only update if watched files have changed in the latest commit 
CHANGED_FILES=$(git show --pretty="format:" --name-only $WATCH_BRANCH) 
if $(echo "$CHANGED_FILES" | grep "^$WATCH_FILES$" -q); then 
    # checkout destination branch, then 
    # checkout latest version of each watched file and add to index 
    git checkout -q $DEST_BRANCH 
    git pull -q 
    SAVEIFS=$IFS 
    IFS=$(echo -n "|") 
    for file in $WATCH_FILES; do 
    git checkout $WATCH_BRANCH -- $file 
    git add $file > /dev/null 
    done 
    IFS=$SAVEIFS 
    # commit with a chance to edit the message, then go back to watched branch 
    LATEST_COMMIT=$(git rev-parse $WATCH_BRANCH) 
    git commit -m "Also including changes from $WATCH_BRANCH's $LATEST_COMMIT" 
    git push origin $DEST_BRANCH 
    git checkout -q $WATCH_BRANCH 
fi 

ho dovuto aggiornare l'utilizzo di grep per rendere l'espressione regolare corrisponde con successo (-P non era un'opzione sull'attuazione grep incluso in Git Bash shell per Windows), aggiungere uno git pull e uno git push origin $DEST_BRANCH. Oh, e ho dovuto aggiungere una shell vuota delle directory e dei file in anticipo (forse solo le directory sarebbero state sufficienti?).

Dato che questo sta effettivamente facendo una spinta, penso che potrebbe essere meglio passare questo script ad essere uno script di post-ricezione invece di post-commit.Altrimenti, potresti spingere il codice in gh-pages che non l'hanno mai fatto diventare master [se scegli di non forzarlo].

59

Puoi provare a utilizzare il servizio https://rawgithub.com/. Sostituisci raw.github.com con rawgithub.com.

UPDATE

Rawgithub è ora Rawgit: https://rawgit.com/ e ha aggiunto una CDN di produzione pure.

+1

Dato che in quel caso staresti già usando un sito non affittato con github, potresti anche usare http://cdnjs.com/ –

+0

Grazie, rawgithub è perfetto. –

+2

Dai anche un'occhiata a [raw.githack.com] (http://raw.githack.com). L'idea è la stessa, ma è una soluzione semplice-nginx che significa che dovrebbe funzionare un po 'più veloce :) – neoascetic

6

Dai uno sguardo allo raw.githack.com. L'idea di questo servizio è ispirata da rawgit.com. Mi sono appena reso conto che l'utilizzo di un intero framework (node.js + express.js) per cose così semplici come il proxy delle richieste è eccessivo e ha fatto le stesse cose usando solo nginx.

Sostituisci il segmento del nome di dominio "githubusercontent" nel tuo URL github/gist con "githack" e il gioco è fatto!

Supporta inoltre bitbucket.com - sostituisce semplicemente l'intero dominio di bitbucket con bb.githack.com.