gpt4 book ai didi

jruby - NSIS - jruby 无法访问环境变量

转载 作者:行者123 更新时间:2023-12-03 08:44:34 26 4
gpt4 key购买 nike

我制作了一个 NSIS 脚本来为 Rails 应用程序创建安装程序。该应用程序使用 JRuby 和 Java。

在安装程序的第一部分中,我设置了环境变量:我将 jruby\bin 添加到 PATH 并创建了 JAVA_HOME 变量,它指向 Java\jre6。

!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”命令,我认为问题就会得到解决。但我仍然找不到这样做的方法。

谢谢。

最佳答案

NSIS 没有任何线程。 显然不完全正确 — 但在您自己的代码中,您不会使用线程。

您可能需要为当前进程设置PATH;我对 ${EnvVarUpdate} 不熟悉,但查看它的脚本似乎并没有更新当前进程中的变量。试试这个:

${EnvVarUpdate} $0 PATH A HKLM "${JRubyBinPath}"  # The line you already have
System::Call Kernel32::SetEnvironmentVariable(t"PATH",tr0)

另一个注意事项:您正在对 JRubyBinPath 进行硬编码;你确定你真的想要那样做吗?

关于jruby - NSIS - jruby 无法访问环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7023529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com