AMAZON SUPPORT
Så det slutade med att jag pratade med killarna på Amazon också efter David Wolevers svar. Bara ifall någon av er stöter på det här inlägget igen. Att bara använda den interna serverns IP är inte tillräckligt, det är dock en bra början. Om du kör Ubuntu för din Postgresql-instans (helst Natty Narwhal), se till att du redigerar filerna pg_hba.conf och postgresql.conf.
Du kan vanligtvis hitta dessa två filer på:/etc/postgresql/8.4/main/(pg_hba.conf eller postgresql.conf)
Tänk på att vi använder Postgresql 8.4 i vår stack, det visade sig vara den mest konsekventa och solida versionen av Postgresql som kördes på Natty Narwhal under våra tester.
För olika versioner av Postgresql (9.1, 9.0 etc..) är katalogen som du kan hitta dessa två filer till inte densamma som ovan. Se till att du känner till rätt katalog för dessa filer.
STEG 1
Gå till Amazon Management Console och se till att båda instanserna är under samma säkerhetsgrupp. Postgresql och Django använder 5432 och 8000 som standard, så se till att du har dessa två portar öppna!
STEG 2
(Gör detta på terminalen på postgresql-instansen)
sudo vim postgresql.conf
Tryck på "i" på ditt tangentbord för att börja göra ändringar. Använd nedåtpilen tills du kommer över
LISTEN_ADDRESSES:'localhost'
Bli av med hash-taggen i fronten, och istället för 'localhost', lägg till den privata IP-adressen för din postgresql-instans (du kan hitta den privata IP:n på din EC2-hanteringskonsol) och du måste även lägga till 127.0.0.1.
EXEMPEL:
LISTEN_ADDRESSES:'privat ip, 127.0.0.1'
Se till att du separerar den privata ip:n och den lokala värdadressen med ett kommatecken och lämnar allt under en offert.
När du har gjort ändringarna trycker du på ESC och trycker på ZZ (två gånger med versaler för att spara ändringarna)
STEG 3
sudo vim pg_hba.conf
Använd nedåtpilen tills du stöter på något som ser ut så här:
Database administrative login by UNIX sockets
local all postgres ident
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 md5
local django_db django_login md5
host replication postgres 127.0.0.1/32 md5
host replication postgres ::1/128 md5
Återigen, tryck på 'i' på ditt tangentbord och gör ändringarna på det exakt som jag har det ovan.
Du kommer att märka under IPv6, jag har django_db och django_login, ändra det till namnet på din postgresql-databas respektive din användarinloggning som du använder för din postgresql-databas.
När du har gjort ändringarna trycker du på ESC och trycker på ZZ (två gånger med versaler för att spara ändringarna)
STEG 4 (Nästan klar Hi5!)
Starta om postgresql-servern med detta kommando i terminalen:
sudo /etc/init.d/postgresql omstart
grattis! Servern är igång, men det finns ett sista steg.
STEG 5
Starta din Django EC2-instans, gå till din settings.py och leta efter detta:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'django_db',
'USER': 'django_login',
'PASSWORD': 'password',
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
Under 'HOST':' ' ändrar du det till 'HOST':'oavsett vad den privata IP-adressen för Postgresql-instansen är'
Spara ändringarna. Öppna en terminal och hitta katalogen där din manage.py-fil finns. När du är i den katalogen kör följande kommando:./manage.py syncdb
Dessa kommer att skapa alla nödvändiga tabeller för modellerna du skapade i Django. Grattis, du har framgångsrikt skapat en länk mellan din databasinstans och din Django-instans.
Om du har några frågor hjälper jag dig mer än gärna! Lämna en kommentar nedan så återkommer jag till dig ASAP! :)