Jeg ønskede at vide, overtid, hvor mange cache hits og savner mit tilfælde var at få. Søgt en masse, og til sidst fandt denne perl-script:

http://code.google.com/p/memcache-top/

Usage er meget enkel. Gem filen, giver det udførelse tilladelser, så bare køre:

. / Memcache-top.pl-kommandoer-kumulativ

Her er et eksempel på output:

memcache-top.pl output example

Synes lige jeg gør fint, caching den rigtige dele! Over 80% hit, og kun halvdelen af min tildelte memcached hukommelse, der bruges ... (det er fordi jeg for nylig havde genstartet den, så som regel holder den fyldte).

Jeg har skrevet hvordan man kan konfigurere Apache, mod_python og Django og hvordan man kan lægge lighttpd bag Apache.

For nylig besluttede jeg mig for at være vært for mine mest besøgte hjemmeside om en anden VPS udbyder [1], og startede en jagt på at opdatere min viden om Django indsættelsen. Jeg gjorde tingene anderledes denne gang, ved hjælp mod_wsgi (den anbefalede måde at indsætte Apache og Django), og konfigurering lighttpd bag Apache til dynamisk indhold (med andre ord, lighttpd vil tjene statiske medier).

Jeg gjorde alt under i de sidste par dage, og ikke skrev de ting jeg gjorde det, fordi det indebar en masse eksperimenter (trial and error) for mig. Som sådan, jeg skriver denne artikel er baseret på hukommelse og kontrollere min config filer. Hvis du støder på problemer, kan du efterlade en kommentar, og jeg vil afklare eventuelle mangler.

Sådan gør du:

Installer de sædvanlige mistænkte

Jeg vælger Ubuntu som min Linux-distro, og installation af alt er en brise på det. sudo apt-get install package-name Denne del er godt dækket rundt omkring på nettet, så jeg vil ikke kommentere i detaljer, hvordan det gøres. Tilstrækkelige til at sige, nogle af de pakker, jeg har installeret var apache2 libapache2-mod-wsgi og lighttpd

Konfigurer Apache og mod_wsgi at indlæse dit projekt

Da lighttpd vil fungere som den primære server for mit domæne, besluttede jeg at flytte Apache til port 81:

sudo vi / etc/apache2/ports.conf

Overskriv eksisterende ip: port linjer med disse:

NameVirtualHost 127.0.0.1:81
Hør 81

Hvor du sætte dit eget Python moduler på nyere Ubuntu installationer har skiftet til /usr/local/lib/python2.6/dist-packages/ Derfor har jeg uploadet Django, mit projekt og andre nødvendige moduler (som ikke var installeret af apt-get til denne mappe og efterlader mig med følgende struktur:

/ Usr/local/lib/python2.6/dist-packages/django /
/ Usr/local/lib/python2.6/dist-packages/my_project_name /

Den mod_wsgi dokumentation har en udmærket artikel om Django integration, men det er temmelig længde. Du bør læse det alligevel, da der er masser af muligheder, som du måske ønsker at bruge. Her er en cheatsheet:

Opret et dokument roden til dit domænenavn:

sudo mkdir / var / www / example.com

Opret den fil, der vil blive indlæst af mod_wsgi med dit projekt konfiguration:

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

Med disse indhold:

import sys
import os

sys.path.append ( '/ usr/local/lib/python2.6/dist-packages')
os.environ [ 'DJANGO_SETTINGS_MODULE'] = 'project_name.settings'

import django.core.handlers.wsgi

ansøgning = django.core.handlers.wsgi.WSGIHandler ()

Oprette et domæne opsætningsfil til Apache:

sudo vi / etc/apache2/sites-available/example.com

Med disse indhold:

<VirtualHost 127.0.0.1:81>
ServerName example.com
ServerAdmin username@example.com

DocumentRoot / 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
Bestil benægte, at
Tillad fra alle
</ 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
Bestil benægte, at
Tillad fra alle
</ 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>
Bestil benægte, at
Tillad fra alle
</ Directory>
</ VirtualHost>

Aktivere det:

cd / etc/apache2/sites-enabled /
sudo ln-s .. / sites-available / example.com

Konfigurer lighttpd til proxy ikke-statiske medier anmodninger til Apache

Jeg brugte MySQL Performance Blog's "Lighttpd som reverse proxy" artikel som grundlag for min egen konfiguration. Derfor vil vi have en url http://example.com/server-status som vil kræve godkendelse, så vi kan se Apache-server status.

Opret en mappe til fejllogger:

sudo mkdir / var / log / lighttpd / example.com

Oprette et domæne opsætningsfil til lighttpd:

sudo vi / etc/lighttpd/conf-available/20-example.com.conf

Med disse indhold:

server.modules + = ( "mod_auth",
"Mod_status",
"Mod_proxy",
)

$ HTTP [ "host"] = ~ "(^ | \.) Eksempel \. 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"
fortælle listing.activate = "disable"

auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/ var / www /. htpasswd"
auth.require = ( "/ server-status" => (
"Metode" => "basic",
"Realm" => "status",
"Kræv" => "gyldig-user"
)
)
)

Der er linjer værd at nævne i den konfiguration ovenfor:

$ HTTP [ "host"] = ~ "(^ | \.) Eksempel \. Com $" (

Dette vil wrap inde i direktiverne gælder kun for anmodninger om example.com.

$ HTTP [ "url"]! ~ "\. (Js | CSS | gif | jpg | png | ico | txt | swf | html | htm) $" (
proxy.server = ( "=> (
( "Host" => "127.0.0.1", "port" => 81)
))
)

Disse vil sende anmodninger om dokumenter, der ikke ender i den angivne udvidelser til ip 127.0.0.1, port 81, hvor Apache liv. Væsentlige, alt, hvad der er statisk indhold (eller mere præcist, der er fastlagt af | adskilt regulære udtryk), vil blive betjent af lighttpd.

cd / etc / lighttpd / conf-aktiveret /
sudo ln-s .. / conf-available / example.com.conf

Fortæl det filsystem, hvor du projektet og Django's admin statisk indhold er placeret:

sudo ln-s / usr/local/lib/python2.6/dist-packages/django/contrib/admin/media / / var / www / example.com / medier
sudo ln-s / usr/local/lib/python2.6/dist-packages/project_name/templates/project_media_dir / / var / www / example.com / project_media_dir /

Endelig genstarte alt så det nyeste konfiguration kan anvendes

sudo / etc/init.d/apache2 genstarte
sudo / etc / init.d / lighttpd restart

SÃ¥ hvad sker der egentlig?

Når en besøgende går til dit websted (example.com), vil anmodningen ramt lighttpd først. Hvis dokumentet stien ikke ender med strengen i vores liste af statisk indhold udvidelser, vil anmodningen blive bruges proxygodkendelse til Apache på port 81, ellers lighttpd vil tjene sig selv.

Og det er det, hvis jeg husker rigtigt. Har jeg går glip af noget? Kommentar efter behag.

[1] Linode, hvis du er nysgerrig. Primært fordi båndbredden er billigere. Hvis du leder efter en Linode henvisning, Linode Linode rabat kode eller forfremmelse kode, tilmelde dig via dette link til at kreditere mig henvisningen. Tak :)

SÃ¥ .... sindssyg

Jeg, Sergio og Mi hoppe :)

Jeg har slået hovedet lidt for at finde det regulære udtryk, men here goes:

PHP:
  1. ( "/( \r \n | \n | \r )+/" , " \n " , $string ) ; $ String = preg_replace ( "/ (\ r \ n | \ n | \ r) + /", "\ n", $ string);

Quick Tip: Linux på kommandolinjen. Bare sættes i anførselstegn og enkle. Here goes:

scp username@192.168.0.1:"'tem espacos aqui'"

Jeg har lavet en testside for at se, hvordan henvisere (både server-side og Javascript) vil arbejde, hvis Google ændrer sine url søgestrengen på søgeresultatsider:

http://www.inerciasensorial.com.br/referrer-test/index.php

Antallet af web-apps er nødt til at gennemsøge internettet i en eller anden form er så stort, og det bliver større hver dag, at jeg enten den dummeste person på Jorden, og Google kan ikke korrekt, eller der er ingen der sælger webcrawling tjenester.

Folk, nogen har brug for at gøre dette. Det målte service (som S3), hvor kunderne kan klikke dig app til gennemgang resultater.

Jeg vil give dig to grunde til, hvorfor jeg skulle gøre dette selv.

Ã…rsag nummer et:
Det er billigere og ikke en andens kernekompetence. Hvordan Friendfeed indeksere alle disse websider? Who cares? De bør ikke gøre dette. Skrive en god webcrawler er hårdt. De har brug for det * data *, når det er * nye *.

Grund nummer to:
Jeg har så mange idéer, men jeg vil gerne fokusere på fremstilling af prototyper dem i stedet for at skrive crawler. Det ville virkelig hjælpe devs rundt om i verden, hvis de bare kunne bruge nogle API til at gennemgå websider.

Har jeg sige API? Ja, det er pointen. Nogen har brug for at skrive en crawler med en API:

POST / api / i = http://www.example.com/file.html
user = name
pass = ord
når = 00 00,12 * * 1-5
expires = 2592000

Yeah, that's crontab syntaks. "når" også ville acceptere "en gang" og "onchange".

"udløber" er antallet af sekunder (siden nu), at denne gennemgang ikke vil være behov for længere.

Denne anmodning ville returnere en "id", der skal bruges senere, når kunden er klar til at hente websiden fra os.

Selvfølgelig er der også:

POST / api / i = regex
format = rss
content_regex = some_string (.*) stinker?

Så du ved, når nogen siger dit produkt stinker. Og:

POST / api / i = regex
name = (jpg, gif)
width = LT200
height = LT200
type = image

LT er mindre end, ville der også være BT og EQ.

Så / API / I = er at indsætte en gennemgang anmodning. Du kan anmode af websider / API / g =

POST / api / g = http://www.example.com/file.html
kun = # some_node_id. some_node_class

XPath på "kun".

Da kunden vil betale for Overført dato, vil det suge for at få kunden til at forespørge / API / g = hver gang han har brug for noget. Og det er ikke meget anderledes end at skrive din egen crawler, ikke? Faktisk er det på grund af robots.txt, html parsing, servertrafikken, og meget mere. Men mange mennesker tror, at skrivning er nemt crawlere og skalerbare.

På en hvilken som helst måde! Det magiske sker, når du gennemgår en webside, og det matcher nogle reglen af en af dine kunder. Nu skal du bare nødt til at fortælle dem listen over tidligere sendt ids / API / i = der er klar. De forbindelse til din server og hente filer.

Og hvis du har ids:

POST / api / g = 111.112.113
komprimere = True

Som ville vende tilbage indsætte hits med ids 111 og 112 og 113 i en zip-fil.

En mere god ting: stordriftsfordele. Alle har brug for den nyeste RSS-feeds. Du kan få masser af kunder, der anmoder om samme foder, men du får kun brug for at gribe det én gang.

Denne tjeneste ville have noget at gøre med søgning, Google, dybe web, semantisk web, whatever. Bare sørg for folk vil vide, når en webside er opdateret.

Så jeg har lige læst, hvordan Britannica planlægger en ny hjemmeside version, for det meste til at "konkurrere" med Wikipedia. Britannica's administrerende direktør taler også om forholdet mellem Google's resultater og Wikipedia's sider.

Anyway, en kritik er gyldig, Wikipedia-artikler er ikke altid den bedste kilde til information om et emne. Og er dette bliver skrevet af en person, der søger dagligt på Google efter vilkår efterfulgt af ordet "Wikipedia", fordi Wikipedia normalt resultater, der er gode nok.

Så her er min idé, dump Wikipedia's database over artiklen titler, og lad folk indsende links til disse titler. Og lad brugerne stemme Reddit-Digg stil. Finde en måde at behandle spammers bot, og du er klar til at gøre.

For eksempel Wikipedia artiklen for "Design_pattern_ (computer_science)" (som jeg har åbent i et faneblad lige nu), ville være bare en masse links til andre websteder, som brugerne kan gøre, hvad du vil have dem til at gøre, så du kan sortere links efter dato.

Som jeg har sagt på mit tidligere indlæg, har jeg følt doven sidst, ellers ville jeg gå ud og gennemføre dette.

Du vil måske spørge, hvorfor ikke bare tilføje links, som brugerne vil upvote til Wikipedia? Nå, sjældne er de artikler på Wikipedia, at acceptere "fuld"-links på deres referencer afsnit. De fleste links er sat til citater, og disse er blot bruges til at retfærdiggøre lille tekst / sætninger uddrag / fakta, ikke på hele websider. Og "eksterne links" i Wikipedia-artikler ikke er sorteret, og det er hele pointen i min idé: p

Nu gå og bygge det og huske at købe mig en øl, hvis du gøre en sorteper.

HTFITIP er en hjemmeside, hvor du kan se, hvad en funktion fra ét sprog kaldes i en anden (eller en gennemførelse).

Ideen kom til mig efter den ellevte gang, jeg spurgte mig selv, hvordan fanden er trim i Python? Det hedder strimler af vejen.

Hjemmesiden er meget enkel. PÃ¥ forsiden, er der denne form:

Hvor fanden er _____'s _____ i _____?

Det første rum er "kilde" programmeringssprog navn, den anden vil vi placere funktionen / metoden navn, og den tredje, den "target" programmeringssprog. Kildesproget er valgfri.

En god kilde til ... source programmeringssprog er PHP's (massive) liste over funktioner. Først og fremmest, PHP's synes at have en funktion for alt, og der er ingen namespace så det er nemmere for os at opbygge et indeks over det. For det andet er det et velkendt sprog. For det tredje er det første sprog af en masse mennesker, så det er meget muligt, at en masse mennesker vil gerne vide, hvad der svarer til prisen for PHP's funktion X i det nye sprog, de er ved at lære, så hvis vi skal starte et sted kunne lige så meget vel være på denne måde.

Når brugeren vælger programmerings sprog fra rullelisten kilde, et Ajax-opkald automatisk får alle navnene på funktionerne, så når brugeren skriver navnet på det andet felt, det auto-fuldfører. Så han vælger "target" sprog på det tredje felt.

Hvor fanden er PHP's trim i Python? (klik indsende)

Hvis forholdet allerede blev oprettet i den database, vil vi præsentere svaret til brugeren:

PHP trim i Python kaldes bånd. (et link til Python's bruger side på stribe ville være rart)

Hvis ikke, kan vi lade brugeren gøre dette forhold. Hvis det ikke er muligt, sige, Python ikke har en array_intersect_uassoc funktion på hvert modul, vi lader brugeren skrive en implementering, wiki-stil.

Web 2.0 baby, alle brugerne levere indholdet, vi gør alle de penge.

Og hjemmesiden backend er enkel. En liste over programmerings sprog og dets funktioner, og forholdet mellem funktioner / metoder, og somekind af wiki ting at lade folk indsende implementeringer.

Jeg har følt doven sidst så gå videre og gennemføre dette, hvis du ønsker. Bør være et nyttigt redskab.


Português flagItaliano flagCoreano flagChinês (simplificado) flagEnglish flagAlemâo flagFrancês flagEspanhol flag
Japonês flagÁrabe flagRusso flagHolandês flagBúlgaro flagTcheco flagCroata flagDinamarquês flag
Finlandês flagHindu flagPolonês flagRomeno flagSueco flagGrego flagNorueguês flag 
By N2H
Dolet 96 rabat på hosting Dreamhost!
Brug "Promo Code" inerti. Lampe med 20GB plads og 1 TB for overførsel.

Kategorier