Je voulais savoir, les heures supplémentaires, comment la mémoire cache de nombreuses et rate mon instance recevait. Beaucoup cherché et finalement trouvé ce script perl:
http://code.google.com/p/memcache-top/
L'utilisation est très simple. Enregistrez le fichier, donnez-lui les permissions d'exécution, puis lancez simplement:
. / Memcache top.pl commandes cumulatif
Voici un exemple de sortie:
Seems like I'm doing fine, la mise en cache les bonnes pièces! Hit plus de 80% et seulement la moitié de ma mémoire memcached attribuée est utilisée ... (c'est parce que je l'avait récemment relancé, alors habituellement la maintient pourvoir).
J'ai écrit la façon de configurer Apache, mod_python et Django et comment mettre lighttpd derrière Apache.
Récemment, j'ai décidé d'héberger mon site web le plus visité sur un autre fournisseur de VPS [1], et a commencé une quête pour mettre à jour mes connaissances sur le déploiement de Django. J'ai fait des choses différemment cette fois, en utilisant mod_wsgi (la méthode recommandée pour déployer Apache et Django), et la configuration de lighttpd derrière Apache pour le contenu dynamique (en d'autres termes, lighttpd se servir des médias statiques).
J'ai fait tout ce ci-dessous dans les jours derniers, et n'a pas écrit les choses que je faisais, parce qu'il implique beaucoup d'expérimentations (essais et erreurs) pour moi. En tant que tel, je vous écris cet article basé sur la mémoire et de vérifier mes fichiers de config. Si vous rencontrez des problèmes, s'il vous plaît laissez un commentaire et je vais préciser les lacunes éventuelles.
Voici comment faire:
Je choisis mon Ubuntu comme distribution Linux, et l'installation de quelque chose est un jeu d'enfant sur elle. sudo apt-get install package-name Cette partie est bien couvert dans le web, donc je ne commenterai pas en détail la façon dont c'est fait. Suffisant de dire, certains des paquets que j'ai installés étaient apache2 libapache2-mod-wsgi et lighttpd
Depuis lighttpd agira comme serveur principal pour mon domaine, j'ai décidé de passer à Apache de port 81:
sudo vi / etc/apache2/ports.conf
Ecraser la propriété intellectuelle existante: les lignes de port avec celles-ci:
NameVirtualHost 127.0.0.1:81
Écouter 81
Où vous mettez vos propres modules Python sur les installations plus récentes Ubuntu a changé de /usr/local/lib/python2.6/dist-packages/ Par conséquent, j'ai rajouté Django, mon projet et d'autres modules nécessaires (qui ne sont pas installé par apt-get à ce répertoire, me laissant avec la structure suivante:
/ Usr/local/lib/python2.6/dist-packages/django /
/ Usr/local/lib/python2.6/dist-packages/my_project_name /
La documentation mod_wsgi a un excellent article sur l'intégration de Django, mais il est assez long. Vous devriez le lire, car il ya beaucoup d'options que vous pourriez utiliser. Voici une antisèche:
Créez un document racine de votre nom de domaine:
sudo mkdir / var / www / example.com
Créez le dossier qui sera chargé par mod_wsgi avec la configuration de votre projet:
sudo mkdir / usr/local/lib/python2.6/dist-packages/project_name/apache /
sudo vi / usr/local/lib/python2.6/dist-packages/project_name/apache/django.wsgi
Avec ce contenu:
import sys
import ossys.path.append ( '/ usr/local/lib/python2.6/dist-packages')
[os.environ 'DJANGO_SETTINGS_MODULE'] = 'project_name.settings'django.core.handlers.wsgi importation
= demande django.core.handlers.wsgi.WSGIHandler ()
Créez un fichier de configuration de domaine pour Apache:
sudo vi / etc/apache2/sites-available/example.com
Avec ce contenu:
<VirtualHost 127.0.0.1:81>
ServerName example.com
ServerAdmin username@example.comDocumentRoot / var / www / example.com
Alias / media / usr/local/lib/python2.6/dist-packages/django/contrib/admin/media /
<Directory /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media>
Options-Indexes
Order deny, allow
Allow from all
</ Directory>Alias / project_media_dir / / usr/local/lib/python2.6/dist-packages/project_name/templates/project_media_dir /
<Directory /usr/local/lib/python2.6/dist-packages/project_name/templates/project_media_dir>
Options-Indexes
Order deny, allow
Allow from all
</ Directory>WSGIScriptAlias / / usr/local/lib/python2.6/dist-packages/project_name/apache/django.wsgi
WSGIDaemonProcess example.com
WSGIProcessGroup example.com<Directory /usr/local/lib/python2.6/dist-packages/project_name/apache>
Order deny, allow
Allow from all
</ Directory>
</ VirtualHost>
L'activer:
cd / etc/apache2/sites-enabled /
sudo ln-s .. / sites-available / example.com
J'ai utilisé MySQL Performance Blog "Lighttpd comme reverse proxy" Article de base pour ma configuration. Par conséquent, nous aurons un http://example.com/server-status qui nécessitent une authentification, ce qui nous permet de voir l'état du serveur Apache.
Créer un répertoire pour les logs d'erreurs:
sudo mkdir / var / log / lighttpd / example.com
Créer un fichier de configuration de domaine pour lighttpd:
sudo vi / etc/lighttpd/conf-available/20-example.com.conf
Avec ce contenu:
server.modules + = ( "mod_auth",
"Mod_status",
"Mod_proxy",
)$ HTTP [ "host"] = ~ "(^ | \.) Exemple \. Com $" (
$ HTTP [ "url"]! ~ "\. (Js | css | gif | jpg | png | ico | txt | swf | html | htm) $" (
proxy.server = ( "=> (
( "Host" => "127.0.0.1", "port" => 81)
))
)server.document-root = "/ var / www / example.com /"
server.errorlog = "/ var / log / lighttpd / example.com / error.log"
Dites listing.activate = "disable"auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/ var / www /. htpasswd"
= auth.require ( "/ server-status" => (
"Méthode" => "Basic",
"Realm" => "statut",
"Require" => "valid-user"
)
)
)
Il ya des lignes dignes de mention dans la configuration ci-dessus:
$ HTTP [ "host"] = ~ "(^ | \.) Exemple \. Com $" (
Ce sera l'intérieur de l'enveloppe directives s'appliquent uniquement aux demandes de example.com.
$ HTTP [ "url"]! ~ "\. (Js | css | gif | jpg | png | ico | txt | swf | html | htm) $" (
proxy.server = ( "=> (
( "Host" => "127.0.0.1", "port" => 81)
))
)
Ces enverra toutes les demandes de documents se terminant pas dans les extensions à IP 127.0.0.1, le port 81, où Apache vie. Essentiellement, le contenu tout ce qui est statique (ou plus exactement, désignés par l'expression | séparés régulière), seront servis par lighttpd.
cd / etc / lighttpd / conf-enabled /
sudo ln-s .. / conf-available / example.com.conf
Dites au système de fichiers où votre projet et le contenu statique admin de Django sont situés:
sudo ln-s / usr/local/lib/python2.6/dist-packages/django/contrib/admin/media / / var / www / example.com / media
sudo ln-s / usr/local/lib/python2.6/dist-packages/project_name/templates/project_media_dir / / var / www / example.com / project_media_dir /
Enfin, redémarrez tout si la nouvelle configuration peut être appliquée
sudo / etc/init.d/apache2 restart
sudo / etc / init.d / lighttpd restart
Lorsqu'un visiteur accède à votre site (example.com), la demande atteindra lighttpd premier. Si le chemin ne se termine pas par la chaîne dans notre liste d'extensions de statique, la demande sera proxy vers Apache sur le port 81, sinon lighttpd va se servir.
Et c'est ça, si ma mémoire est bonne. Did I miss anything? Commentaire à volonté.
[1] linode, si vous êtes curieux. Principalement parce que la bande passante est moins chère. Si vous êtes à la recherche d'un renvoi linode, linode linode code de réduction ou un code promotion, inscrivez-vous en utilisant ce lien au crédit me le renvoi. Merci ![]()
So .... insane
I, Sergio et Mi saut ![]()
Je me suis cogné la tête un peu de trouver l'expression régulière, mais voici:
Quick Tip: Linux sur la ligne de commande. Il suffit de mettre entre guillemets et simple. Here goes:
scp username@192.168.0.1:"'tem espacos aqui'"
J'ai fait une page de test pour voir comment on est venu (à la fois côté serveur et JavaScript) fonctionnera si Google change de chaîne de requête d'URL sur les pages de résultats de recherche:
Le nombre d'applications web qui ont besoin d'exploration du Web, sous une forme ou une autre est si énorme, et il devient plus grand de tous les jours, que je suis, soit la plus stupide personne sur la Terre et Google ne peut pas correctement ou qu'il n'y a aucune vente d'exploration du Web services.
Folks, quelqu'un a besoin pour ce faire. Le service de compteur (comme la S3), où vous pouvez interroger costumiers app pour l'analyse des résultats.
Je vais vous donner deux raisons pour lesquelles je dois le faire moi-même.
Raison numéro un:
C'est moins cher et non pas quelqu'un d'autre compétence de base. Combien de Friendfeed indexer toutes ces pages? Qui s'en soucie? Ils ne devraient pas faire cela. Rédaction d'un crawler Web de qualité est difficile. Ils ont besoin de données * * quand il est nouveau * *.
Raison numéro deux:
J'ai tellement d'idées, mais je veux me concentrer sur le prototypage eux au lieu d'écrire les chenilles. Ce serait vraiment aider les développeurs à travers le monde, si seulement ils pouvaient utiliser certaines API pour explorer les pages web.
Ai-je dit API? Oui, c'est le point. Quelqu'un a besoin d'écrire un robot avec une API:
POST / api / i = http://www.example.com/file.html
= nom d'utilisateur
= un mot de passe
lorsque = 00 00.12 * * 1-5
expires = 2592000
Ouais, c'est la syntaxe crontab. "quand" accepterait aussi "une fois" et "onchange".
"expire" est le nombre de secondes (depuis maintenant) que cette exploration ne sera plus nécessaire.
Cette requête renvoie une variable "id", qui sera utilisé plus tard, lorsque le consommateur est prêt à télécharger la page Web de notre part.
Bien sûr il ya aussi:
POST / api / i = regex
format = rss
content_regex = some_string (.*) sucks?
Donc, vous savez quand quelqu'un vous dit votre produit sucks. Et:
POST / api / i = regex
= nom (jpg, gif)
width = LT200
= hauteur LT200
type = image
LT est inférieur, il y aurait également GT et EQ.
Ainsi, / api / i = consiste à insérer une demande de ramper. Vous pouvez demander par webpages / api / g =
POST / api / g = http://www.example.com/file.html
seulement = # some_node_id. some_node_class
XPath sur "seulement".
Depuis le costumier paierait pour Transféré date, ce serait d'avoir sucer le costumier pour interroger / API / G = chaque fois qu'il doit quelque chose. Et ce n'est pas très différent que d'écrire votre robot d'exploration propre, n'est pas? En fait, c'est parce que de fichiers robots.txt, l'analyse syntaxique HTML, la charge du serveur, et bien plus encore. Mais beaucoup de gens pensent que l'écriture est simple et évolutif robots d'exploration.
De toute manière! La magie se produit lorsque vous explorer une page Web, et elle correspond à une règle fixée par l'un de vos costumiers. Maintenant, vous avez juste besoin de leur dire la liste des envoyée précédemment par IDS / API / i = qui sont prêts. Ils se connectent à votre serveur et de télécharger les fichiers.
Et si vous avez des ids:
POST / api / g = 111112113
compress = True
Qui reviendrait prie d'insérer avec des ID 111 et 112 et 113 dans un fichier zip.
Encore une bonne chose: l'économie d'échelle. Tout le monde doit le plus récent RSS feeds. Vous pouvez avoir des dizaines de costumiers demandant la même alimentation, mais vous n'aurez besoin de le saisir une seule fois.
Ce service aurait rien à voir avec la recherche, Google, web invisible, web sémantique, que ce soit. Assurez-vous que les gens sachent à quel moment une page web est mis à jour.
Alors je viens de lire comment Britannica envisage une version nouveau site Internet, surtout pour la «concurrence» avec Wikipédia. PDG Britannica's parle aussi de la relation entre les résultats de Google et des pages de Wikipédia.
Quoi qu'il en soit, une critique est valide, les articles de Wikipédia sont parfois pas la meilleure source d'information sur un sujet. Et cela est écrit par quelqu'un qui cherche tous les jours sur Google pour les termes suivis par le mot "Wikipedia", parce que Wikipedia ont généralement des résultats qui sont assez bons.
Alors, voici mon idée, dump de base de données de Wikipédia de titres des articles, et laisser les gens soumettent des liens vers ces titres. Et laisser les utilisateurs Reddit vote Digg style. Trouver un moyen de faire face aux bot spammeur et vous êtes prêt à faire.
Par exemple, l'article de Wikipedia pour "Design_pattern_ (computer_science)" (que j'ai ouvert dans un onglet en ce moment) serait tout un tas de liens vers des sites autres que les utilisateurs peuvent faire ce que vous voulez qu'ils fassent pour vous permettre de trier les liens par date.
Comme je l'ai dit sur mon post précédent, je me sens paresseux récents, sinon, j'irais mettre en œuvre la présente.
Vous pourriez vous demander, pourquoi ne pas simplement ajouter les liens que les utilisateurs seraient upvote avec Wikipédia? Eh bien, rares sont les articles sur Wikipedia qui acceptent des "liens" complet sur la section des références de son. La plupart des liens sont mis pour les citations, et ce sont simplement utilisés pour justifier petit texte / extraits de phrases / des faits, pas des pages Web tout entier. Et les "liens externes" section d'articles de Wikipedia ne sont pas triés, et c'est toute la question de mon idée: p
Maintenant, va construire et n'oubliez pas de me payer une bière si vous faites un mâle.
HTFITIP est un site où vous pouvez voir ce qu'une fonction d'une langue est appelée dans un autre (ou une mise en œuvre).
L'idée m'est venue après la onzième fois, je me suis demandé, comment la baise est compensateur dans Python? It's called bande en cours de route.
Le site est très simple. Sur la page de couverture, il ya ce formulaire:
Comment c 'est de _____ _____ dans _____?
Le premier espace est la "source" nom du langage de programmation, la seconde, nous allons mettre la fonction / nom de la méthode, et la troisième, la "cible" langage de programmation. La langue source est optionnelle.
Une bonne source pour la ... source est le langage de programmation PHP fonctions de liste (massif). Tout d'abord, PHP semble avoir une fonction pour tout, et il n'y a aucun espace de noms donc c'est plus facile pour nous de construire un indice de sa création. Deuxièmement, il est une langue largement connus. Troisièmement, c'est la langue maternelle de beaucoup de gens, donc c'est tout à fait possible que beaucoup de gens voudront savoir ce qui est l'équivalent pour la fonction X de PHP dans la nouvelle langue qu'ils apprennent, alors si nous devons commencer quelque part pourrait aussi bien être de cette façon.
Lorsque l'utilisateur sélectionne le langage de programmation de la source de la liste déroulante, un appel d'Ajax reçoit automatiquement tous les noms de fonction ainsi lorsque l'utilisateur tape le nom sur le deuxième champ, il complète automatiquement. Puis, il choisit la «cible» de la langue sur le troisième champ.
Comment c 'est-ce que PHP assiette en Python? (cliquer sur soumettre)
Si la relation a déjà été établie avec la base de données, nous présentons la réponse à l'utilisateur:
PHP assiette en Python est appelée bande. (un lien vers la page d'utilisateurs de Python sur bande serait bien)
Si non, nous ne pouvons laisser l'utilisateur faire de cette relation. Si ce n'est pas possible, disons, Python ne possède pas de fonction array_intersect_uassoc sur n'importe quel module, nous laissons le type d'utilisateur une mise en œuvre, wiki-style.
Web 2.0 pour bébés, tous les utilisateurs fournissent le contenu, nous faisons tout l'argent.
Et le backend du site est simple. Une liste de langage de programmation et de ses fonctions, et la relation entre les fonctions / méthodes et protégé par une sorte de trucs wiki pour permettre aux gens de soumettre des implémentations.
I've been feeling lazy récents aller de l'avant et mettre en œuvre cette option si vous voulez. Devrait être un outil utile.