On 16 April 2010 03:23, pablo platt <[email protected]> wrote: > Thank you very much for the kind help. > > To sum things for others: > > 1. Build and install cx_Oracle (the path may vary for xe-server/ xe-client/ > instant client...) > export LD_RUN_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib > export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server > rm -rf build > python setup.py build > python setup.py install > > 2. Add the ORACLE_HOME environment variable to > yourproject/deploy/django.wsgi file: > os.environ["ORACLE_HOME"] = > "/usr/lib/oracle/xe/app/oracle/product/10.2.0/server" > > 3. When using cx_Oracle from the shell, for example in order to use django > syncdb: > export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server > export LD_LIBRARY_PATH=$ORACLE_HOME/lib
Having done the LD_RUN_PATH at compile time, you shouldn't need the LD_LIBRARY_PATH at run time. At least not for the cx_Oracle module when running Python. You might still need it for command line Oracle programs like sqlplus. Graham > export PATH=$ORACLE_HOME/bin:$PATH > python manage.py runserver > > On Thu, Apr 15, 2010 at 3:52 AM, Graham Dumpleton > <[email protected]> wrote: >> >> On 15 April 2010 10:37, pablo platt <[email protected]> wrote: >> >> Ideally the .so for cx_Oracle would be built such that LD_RUN_PATH was >> >> used to embed the library directory into the .so so that >> >> LD_LIBRARY_PATH not needed at run time. >> > >> > I tried as you suggested but probably got the syntax wrong. >> >> Looks to be right syntax. >> >> > How do I use LD_LIBRARY_PATH so it'll be embedded in the .so? >> > $ export LD_RUN_PATH=/usr/lib/oracle/11.2/client/lib >> > $ python setup.py build >> > $ python setup.py install >> >> That is what LD_RUN_PATH is for. >> >> The difference is that LD_LIBRARY_PATH is used at run time when >> invoking a program. The LD_RUN_PATH is used by linker at compile time >> to embed that path in the application and/or .so file such that >> LD_LIBRARY_PATH isn't needed at run time. >> >> Did you make sure you removed the 'build' directory before building it >> again in case old files still there and so didn't actually get >> rebuilt? >> >> So long as you don't have LD_LIBRARY_PATH set at the time, you can use >> the 'ldd' command to list library dependencies of a .so file and see >> which library directories they resolve to and whether found or not. >> You can therefore use that to validate the compilation occurred >> correctly and LD_RUN_PATH was used. >> >> I believe that on a Linux box you can also use: >> >> objdump -p blah.so >> >> to dump out what the RPATH encoded into a .so file is as well. >> >> >> The ORACLE_HOME then need only >> >> be set in WSGI script file. >> > >> > Do you mean using os.environ inside my django project .wsgi file? >> > does it matter where in the django.wsgi script I'm putting it? >> > os.environ["ORACLE_HOME"] = "/usr/lib/oracle/11.2/client" >> >> Before your import any modules that may cause Oracle Python wrappers >> to be imported. >> >> Graham >> >> >> If that isn't possible, LD_LIBRARY_PATH >> >> may need to be set in Apache envvars file, same directory as Apache >> >> executable. If you Linux distribution doesn't have that file, then >> >> needs to be set in Apache startup scripts. This is assuming the Oracle >> >> libraries not in standard library search directories for system. >> > >> > I'm using the Apache package on the free edition of Oracle enterprise >> > linux >> > 5 and I don't see the envvars file >> > so I'll use your first suggestion. >> > >> > >> > On Wed, Apr 14, 2010 at 9:53 AM, Graham Dumpleton >> > <[email protected]> wrote: >> >> >> >> On 13 April 2010 21:12, pablo platt <[email protected]> wrote: >> >> > Hi, >> >> > >> >> > I need to setup the same django project on several identical servers. >> >> > >> >> > Details: >> >> > - os - free edition of oracle enterprise linux 5 >> >> > - Apache / mod_wsgi >> >> > - python >> >> > - custom python2.6 installation >> >> > - oracle db with cx_Oracle >> >> > >> >> > What is the simplest way to set it up? >> >> >> >> Look at buildout for doing reproducible builds. >> >> >> >> > Would you recommend creating a system user for the django project and >> >> > use >> >> > daemon mode? >> >> >> >> Both are good ideas. >> >> >> >> > What type of user and what privileges does it need? >> >> >> >> Normal user. If by privileges you mean what file system access, that >> >> is going to depend on what your application needs to access. >> >> >> >> At least the WSGI script file and the directories down to that >> >> location must be accessible to Apache user. All other files need only >> >> be accessible to the user that daemon mode process runs as. >> >> >> >> > Can I set ORACLE_HOME, LD_LIBRARY_PATH, PATH=$ORACLE_HOME/bin:$PATH >> >> > for >> >> > this >> >> > user? >> >> >> >> Doing that would have no effect as Apache doesn't inherit them. >> >> >> >> Ideally the .so for cx_Oracle would be built such that LD_RUN_PATH was >> >> used to embed the library directory into the .so so that >> >> LD_LIBRARY_PATH not needed at run time. The ORACLE_HOME then need only >> >> be set in WSGI script file. If that isn't possible, LD_LIBRARY_PATH >> >> may need to be set in Apache envvars file, same directory as Apache >> >> executable. If you Linux distribution doesn't have that file, then >> >> needs to be set in Apache startup scripts. This is assuming the Oracle >> >> libraries not in standard library search directories for system. >> >> >> >> > Would you use a virtualenv for cx_Oracle? >> >> >> >> Always a good idea to use virtualenv if don't want to trust what is in >> >> system Python site-packages. See: >> >> >> >> http://code.google.com/p/modwsgi/wiki/VirtualEnvironments >> >> >> >> > Can I somehow put the python2.6 inside the virtualenv so it will >> >> > portable to >> >> > other servers? >> >> >> >> No. A virtualenv references an separate Python installation, cannot >> >> contain one. >> >> >> >> You can use buildout however to automatically install a Python >> >> installation just for your application setup. Apache is though bound >> >> to that Python via mod_wsgi, so maybe buildout should install your >> >> Apache and any other required bits as well. >> >> >> >> Graham >> >> >> >> -- >> >> You received this message because you are subscribed to the Google >> >> Groups >> >> "modwsgi" group. >> >> To post to this group, send email to [email protected]. >> >> To unsubscribe from this group, send email to >> >> [email protected]. >> >> For more options, visit this group at >> >> http://groups.google.com/group/modwsgi?hl=en. >> >> >> > >> > -- >> > You received this message because you are subscribed to the Google >> > Groups >> > "modwsgi" group. >> > To post to this group, send email to [email protected]. >> > To unsubscribe from this group, send email to >> > [email protected]. >> > For more options, visit this group at >> > http://groups.google.com/group/modwsgi?hl=en. >> > >> >> -- >> You received this message because you are subscribed to the Google Groups >> "modwsgi" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/modwsgi?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "modwsgi" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/modwsgi?hl=en. > -- You received this message because you are subscribed to the Google Groups "modwsgi" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/modwsgi?hl=en.
