【发布时间】:2011-08-11 09:20:01
【问题描述】:
我制作了一个 NSIS 脚本来为 Rails 应用程序创建安装程序。 该应用程序使用 JRuby 和 Java。
在安装程序的第一部分中,我设置了环境变量:我将 jruby\bin 添加到 PATH 并创建了指向 Java\jre6 的 JAVA_HOME 变量。
!define JRubyBinPath "$PROGRAMFILES\${PRODUCT_PUBLISHER}\JRuby\jruby-1.6.3\bin"
Function SetEnvVars
# set JAVA_HOME
${EnvVarUpdate} $0 "JAVA_HOME" "A" "HKCU" "C:\Program Files\Java\jre6"
# add jruby to Path
${EnvVarUpdate} $0 "Path" "A" "HKLM" "${JRubyBinPath}"
FunctionEnd
Section "Pre" SEC01
Call SetEnvVars
...
SectionEnd
** 所有路径都是正确的。 **
在安装程序的第二部分,打包所有应用程序文件和 JRuby 文件后,我使用以下命令初始化数据库:
Section "Installer" SEC02
...
SetOutPath $INSTDIR
nsExec::ExecToLog "jruby -S bundle exec rake db:create RAILS_ENV=production"
nsExec::ExecToLog "jruby -S bundle exec rake db:migrate RAILS_ENV=production"
nsExec::ExecToLog "jruby -S bundle exec rake db:seed RAILS_ENV=production"
...
SectionEnd
问题是,当我在干净的 Windows 系统上运行安装程序时,所有代码都正确执行,除了包含使用“jruby”的命令的行。我在安装程序窗口中没有收到任何错误,它只是不会执行这些行。
无论如何,如果我在安装程序完成后立即在控制台中手动运行这些命令,一切都会按预期运行。
从我目前看到的情况来看,问题是安装程序在完成之前无法访问环境变量。
* 到目前为止,我为解决此问题所做的是创建主安装程序 Installer.exe(这里我打包所有文件并设置环境变量)和另一个可执行文件 Init.exe它初始化数据库。 如果我手动运行这些可执行文件——首先是 Installer.exe,然后是 Init.exe——应用程序会正确安装。但是如果我尝试从 Installer.exe 启动 Init.exe,它将无法正常工作。
但是,如果有一种方法可以在新的/不同的线程中执行“jruby”命令,而不是设置环境变量的线程,我认为问题将得到解决。但我仍然找不到这样做的方法。
谢谢。
【问题讨论】:
标签: jruby environment-variables nsis