【发布时间】:2022-01-09 23:23:08
【问题描述】:
我是 Ruby 新手,想将环境变量永久导出到主机系统。
现在我正在使用以下 ruby 脚本。在此脚本中,有一个 ENV 命令将 URL env var 添加到当前执行环境中,并且工作正常。但是我想让这个改变持久化到主机,在我的例子中是它的 linux。 我该怎么做?
require 'singleton'
java_import com.test.TestClass;
class RubyClient
include Singleton
def initialize
ENV['URL'] = 'http://localhost'
end
end
def test_client
puts TestClass.getEnv
end
class TestClass{
public String getEnv({
return StringUtils.trimToNull(System.getenv("URL"));
}
}
【问题讨论】:
-
你没有;这将是一个巨大的潜在安全风险。你能做的最好的事情是修改一个 shell 启动配置(如果你的脚本可以写入适当的文件)。更大的问题是你为什么要这样做——这似乎是一个 XY 问题。
-
我同意@DaveNewton。您可能希望将您的 URL 作为参数传递给某个类初始化程序或方法,或者使其成为模块级常量。环境变量更常被用作覆盖;它们不是在 Ruby 应用程序中传递数据的正确方法。
-
@DaveNewton,托德,不知何故我也同意这一点。我在这里添加了几行代码。所以完整的场景是,这个 ruby 将导出 var,这个 var 将被 JRuby java 类使用。现在 ruby 将其导出到当前 shell 中,并且它对 java 类不可见。我不能直接将 URL 传递给类。这是我的限制。
-
它只是不能那样工作;您可以在子进程中运行需要环境变量的 Java 代码(这看起来很麻烦),或者使用更灵活的配置机制启动 JRuby 代码。
-
正如我所提到的,不要使用 ENV 数组来设置值。将它们设置为可以被 ENV 变量覆盖的实例变量或常量,并将它们传递给您的 Java 方法,或者让它们从配置文件中读取。如果使用 RSpec,您还可以在测试中使用 #let 语句设置值。
标签: ruby environment-variables