2012-06-08 6 views

risposta

48

Attualmente ho un server privato, un account di shell e un po 'di fortuna . Così qui è quello che faccio:

  1. SSH al vostro ospite per aggiornare python

    cd ~ 
    mkdir tmp 
    cd tmp 
    wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz 
    tar zxvf Python-2.7.3.tgz 
    cd Python-2.7.3 
    ./configure --enable-shared --prefix=$HOME/Python27 --enable-unicode=ucs4 
    make 
    make install 
    
  2. Configurazione sistema di utilizzare la nostra nuova Python. Aprire ~/.bashrc e aggiungere la seguente riga

    export PATH="$HOME/Python27/bin:$PATH" 
    export LD_LIBRARY_PATH=$HOME/Python27/lib 
    
    #save it and run 
    source ~/.bashrc 
    

    è ora possibile controllare la versione di Python con which python

  3. Installare easy_install, pip

    cd ~/tmp 
    wget http://peak.telecommunity.com/dist/ez_setup.py 
    python ez_setup.py 
    easy_install pip 
    # Or even shorter 
    wget https://bootstrap.pypa.io/get-pip.py 
    python get-pip.py 
    
  4. Installare virtualenv

    pip install virtualenv 
    virtualenv $HOME/<site>/env 
    #Switch to virtualenv 
    source $HOME/<site>/env/bin/activate 
    

    è anche possibile aggiungere percorso env per bashrc

    export PATH="$HOME/<site>/env/bin/:$PATH" 
    source ~/.bashrc 
    
  5. Installare Django e tutto il resto

    pip install django 
    pip install .... 
    pip install .... 
    pip install .... 
    
  6. Crea progetto

    cd $HOME/<site>/ 
    python $HOME/<site>/env/bin/django-admin.py startproject project 
    
  7. Creare passenger_wsgi.py in HOME/<site>/ con i seguenti contenuti

    import sys, os 
    cwd = os.getcwd() 
    sys.path.append(cwd) 
    sys.path.append(cwd + '/project') #You must add your project here or 500 
    
    #Switch to new python 
    #You may try to replace $HOME with your actual path 
    if sys.version < "2.7.3": os.execl("$HOME/<site>/env/bin/python", 
        "python2.7.3", *sys.argv) 
    
    sys.path.insert(0,'$HOME/<site>/env/bin') 
    sys.path.insert(0,'$HOME/<site>/env/lib/python2.7/site-packages/django') 
    sys.path.insert(0,'$HOME/<site>/env/lib/python2.7/site-packages') 
    
    os.environ['DJANGO_SETTINGS_MODULE'] = "project.settings" 
    import django.core.handlers.wsgi 
    application = django.core.handlers.wsgi.WSGIHandler() 
    

o questo modo

import sys, os 

BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 

sys.path.append(os.path.join(BASE_DIR)) #You must add your project here or 500 

#Switch to new python 
#You may try to replace $HOME with your actual path 
PYTHON_PATH = os.path.join(BASE_DIR, 'env', 'bin', 'python') 
if sys.executable != PYTHON_PATH: 
    os.execl(PYTHON_PATH, "python2.7.12", *sys.argv) 

Se si utilizza Django 1.7, sostituire gli ultimi due linea con

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 
  1. Enjoy: D

Nuova versione di Python su DreamHost non sarà più tornare sys.executable in modo da questa è la mia versione di passenger_wsgi

import sys, os 

VIRTUAL_ENV_PYTHON = 'venv-python' # Python > 2.7.6 dreamhost not return sys.executable 
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 

def is_venv_python(): 
    if len(sys.argv) > 0: 
     last_item = sys.argv[len(sys.argv)-1] 
     if last_item == VIRTUAL_ENV_PYTHON: 
      return True 
    return False 

sys.path.append(os.path.join(BASE_DIR)) #You must add your project here or 500 

#Switch to new python 

PYTHON_PATH = os.path.join(BASE_DIR, 'env', 'bin', 'python') 
if not is_venv_python(): 
    os.execl(PYTHON_PATH, "python2.7.12", *sys.argv + [VIRTUAL_ENV_PYTHON]) 

sys.path.insert(0, os.path.join(BASE_DIR, 'env', 'bin')) 
sys.path.insert(0, os.path.join(
    BASE_DIR, 'env', 'lib', 'python2.7', 'site-packages' 
)) 
+1

guida Nizza, grazie per la condivisione. –

+4

Sarebbe bello se qualcuno può scrivere uno script di automazione –

+0

siamo non abbiamo creato alcuna directory di progetto all'interno di env, abbiamo? sys.path.insert (0, '$ HOME//env/project') get Si è verificato un errore durante l'importazione del passeggero_wsgi.py anche dopo/project da quello) –

1

Attualmente Dreamhost server aggiornati a Ubuntu 12.04, e ho un errore:

Import Error: <path-to-python>/_io.so undefined symbol: PyUnicodeUCS2_Decode 

dopo aver compilato python personalizzato ed eseguito "python ez_setup.py"

La soluzione era quella di compilare python con --enable-unicode = UCS4 al punto 1

./configure --enable-shared --prefix=$HOME/Python27 --enable-unicode=ucs4 
+0

Grazie. Devo aggiornare la mia risposta –

+1

* non so * Va anche detto che la versione attuale di Python predefinita su "hosting felice" == 2.7.3, ma Django è ancora vecchio, quindi uso i tuoi passi per creare virtualenv. Funziona bene! Grazie! –