mod_wsgi un comportement inattendu sur bookmarklet ou soumettre une action de base de données connexes

StackOverflow https://stackoverflow.com/questions/3144809

Question

[mis à jour ci-dessous]

J'ai un peu d'un problème du déploiement d'un site sur apache avec mod_wsgi avec javascript fonctionnalité bookmarklet; le site alpha est et utilisable ici: stemhub.org . Le problème est que le bookmarklet (qui est un bouton de menu du navigateur) Soumet à une page comme

http://stemhub.org/submit/http://the-users-link.com/here

qui renvoie alors un formulaire pour les métadonnées sur le lien enregistrer. La fonction d'affichage (un flacon / werkzeug application) vérifie la base de données pour voir si le lien a déjà été ajouté, puis retourne la forme avec un autre pré-existant ou nouvellement affecté id lien, que je suppose que pourrait déclencher une sorte de problème de synchronisation. Très étrangement, quand je soumets le lien, je reçois la page http://stemhub.org/submit/http://the-users-link.com/here avec un « introuvable » apache erreur, mais si je puis recharger la page, je reçois la forme comme prévu. Les journaux d'erreurs contiennent des messages sur le threading des exceptions, mais ils le font quand le site comme prévu effectue ensuite, aussi.

Il y a un déploiement parallèle de l'application sur un autre port - stemhub.org:5000 - que est en cours d'exécution sur Tornado et fonctionne très bien, ainsi que la version de développement local.

Voici les bookmarklets, sur la chance qu'ils sont le problème:

port 5000 version de travail: javascript:(function(){window.open('http://stemhub.org:5000/submit/'+encodeURIComponent(window.location.href),'height=200,width=150')}())

Port problème 80 Version: javascript:(function(){window.open('http://stemhub.org/submit/'+encodeURIComponent(window.location.href),'height=200,width=150')}())

Mise à jour: Pour une raison qui appartient à une autre balise changer la méthode javascript encodeURIComponent à encodeURI fait tout le travail comme prévu, au moins dans FF et Chrome. Prendra les conseils de Graham Dumpleton quelque chose de plus raisonnable pour cela, cependant à l'avenir.

Était-ce utile?

La solution

Quelle que soit votre problème, la façon dont vous mettez une deuxième URL dans l'URL ne fonctionnera pas avec Apache. En effet, Apache va s'effondrer des barres obliques répéter en une seule barre oblique et que seule barre oblique est alors tout ce que l'application hébergé par Apache verra dans PATH_INFO.

En d'autres termes, pas un problème de mod_wsgi et pourrait se produire si d'autres mécanismes d'hébergement d'applications web dynamiques conjointement avec Apache, même non Python.

BTW, certains peuvent remarquer que les URL non modifié est en REQUEST_URI, mais se fonder sur cette est pas nécessairement une bonne idée de travailler sur la façon de répartir et que la carte contre SCRIPT_NAME et PATH_INFO ne peuvent pas toujours être simple selon si les règles de réécriture sont utilisés dans Apache.

Proposez vous enquêtez au lieu de la deuxième URL faisant partie d'une chaîne de requête et non pas le chemin d'URL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top