From: Michal Suchanek on 23 May 2010 07:28 Hello I am trying to run some JRuby script and I have to set the CLASSPATH for my script to work. I use a launcher locally so I can run the script as /scripts/mylauncher script.rb but if I wanted to distribute a sample script this is somewhat troublesome. I tried to embed the ruby code in a shell script but as Ruby refuses to read the code from stdin this is not quite nice: #!/bin/sh CLASSPATH=<something> jruby -e ' <some code that does not use single quotes> ' "$@" Note that while this example uses JRuby there might be native extensions which require specific environment settings and woud have the same launcher requirements. If somebody had a better idea for a launcher it would be nice. Thanks Michal
From: Henning Bekel on 23 May 2010 07:52 Michal Suchanek wrote: > I am trying to run some JRuby script and I have to set the CLASSPATH > for my script to work. [...] > Note that while this example uses JRuby there might be native > extensions which require specific environment settings and woud have > the same launcher requirements. To rephrase: Your software requires some environment variables to be set in order to run. The standard way of providing this is is to install a script with the executable bit set in /etc/profile.d/ that modifies the environment variables on login, e.g.: /etc/profile.d/mypackage.sh: export CLASSPATH="$CLASSPATH:/additional/class/paths" /etc/profile is read on login and should run any executable scripts it finds in /etc/profile.d/. Hope this helps, Henning
From: Michal Suchanek on 23 May 2010 18:18 On 23 May 2010 13:55, Henning Bekel <h.bekel(a)googlemail.com> wrote: > Michal Suchanek wrote: > >> I am trying to run some JRuby script and I have to set the CLASSPATH >> for my script to work. > [...] >> Note that while this example uses JRuby there might be native >> extensions which require specific environment settings and woud have >> the same launcher requirements. > > To rephrase: Your software requires some environment variables to be set > in order to run. The standard way of providing this is is to install a > script with the executable bit set in /etc/profile.d/ that modifies the > environment variables on login, e.g.: > > /etc/profile.d/mypackage.sh: > > export CLASSPATH="$CLASSPATH:/additional/class/paths" > > /etc/profile is read on login and should run any executable scripts it > finds in /etc/profile.d/. > > Hope this helps, > Henning Well, actually it does not. If I wanted to distribute the script in multiple files then distributing it with a launcher would be just fine and would not require the user of the script to have administrative privileges to install the script in a system directory nor the additional knowledge how to make it effective without restarting his session. However, I was aiming for one self-contained example which is easy to distribute so I wanted one file. Also I do not want to inflate the environment needlessly while the script is not in use. It is not a good practice, the environment space is limited. Thanks Michal
From: Charles Oliver Nutter on 25 May 2010 15:56 On Sun, May 23, 2010 at 5:18 PM, Michal Suchanek <hramrach(a)centrum.cz> wrote: > Well, actually it does not. > > If I wanted to distribute the script in multiple files then > distributing it with a launcher would be just fine and would not > require the user of the script to have administrative privileges to > install the script in a system directory nor the additional knowledge > how to make it effective without restarting his session. > > However, I was aiming for one self-contained example which is easy to > distribute so I wanted one file. You can generally get by using the runtime CLASSPATH in JRuby: require 'java' $CLASSPATH << 'somefile.jar' This doesn't always work, since it's using a child classloader in JRuby to handle all the classpath entries, but it often works well enough for a simple self-contained app. Alternatively you can just throw everything in the same jar if there aren't file conflicts... - Charlie
From: Michal Suchanek on 25 May 2010 17:38 On 25 May 2010 21:56, Charles Oliver Nutter <headius(a)headius.com> wrote: > On Sun, May 23, 2010 at 5:18 PM, Michal Suchanek <hramrach(a)centrum.cz> wrote: >> Well, actually it does not. >> >> If I wanted to distribute the script in multiple files then >> distributing it with a launcher would be just fine and would not >> require the user of the script to have administrative privileges to >> install the script in a system directory nor the additional knowledge >> how to make it effective without restarting his session. >> >> However, I was aiming for one self-contained example which is easy to >> distribute so I wanted one file. > > You can generally get by using the runtime CLASSPATH in JRuby: > > require 'java' > > $CLASSPATH << 'somefile.jar' > > This doesn't always work, since it's using a child classloader in > JRuby to handle all the classpath entries, but it often works well > enough for a simple self-contained app. > > Alternatively you can just throw everything in the same jar if there > aren't file conflicts... > The thing is that I do have to set the CLASSPATH for my application to work, and even set LD_LIBRARY_PATH in some cases, even if everything is in one jar. Also setting $CLASSPATH does not work anyway: java/lang/ClassLoader.java:1649:in `loadLibrary': java.lang.UnsatisfiedLinkError: Can't load library: /InsightToolkit.jar must be in CLASSPATH/libSwigRuntimeJava.so (NativeException) from java/lang/Runtime.java:787:in `load0' from java/lang/Runtime.java:775:in `load' from InsightToolkit/itkbase.java:60:in `<clinit>' from InsightToolkit/itkImageFileReader_2DJNI.java:1493:in `<clinit>' from InsightToolkit/itkImageFileReaderF2.java:67:in `itkImageFileReaderF2_New' from ./testscript.rb:29 Thanks Michal
|
Pages: 1 Prev: Reporting Bugs about REXML ? Next: [ANN] RubyKaigi2010: CRuby Commiter Invitation |