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.

Reply via email to