【问题标题】:Is there a way to return the value of the environment variable RAILS_ENV from the Linux command line?有没有办法从 Linux 命令行返回环境变量 RAILS_ENV 的值?
【发布时间】:2018-05-13 10:11:31
【问题描述】:

在 Linux 中,您可以使用命令 echo $PATH 找到 $PATH 环境变量的值。在 Rails 中,RAILS_ENV(和类似的RACK_ENV)是一个环境变量,其值为“开发”和“生产”。但是在命令行上,echo RAILS_ENV 返回无用的字符串 RAILS_ENV(如您所料),而 echo $RAILS_ENV 什么也不返回(可能是因为这不是环境变量的名称)。我也尝试过env RAILS_ENV 和变体。是我的语法错误,还是什么?

我是否认为在 Rails 运行之前环境变量基本上不存在?好吧...我尝试在一个终端上运行 Rails 服务器,然后打开另一个,然后重复上述命令;没有骰子。

或者是 Linux 或者我的 shell 没有跟踪这个环境变量的问题?但是......它不是必须的,作为一个环境变量吗?我尝试在env 命令的输出中查找它,但它不存在。

是否有可能发现RAILS_ENV 环境变量的值的唯一方法是通过Rails 本身,例如通过调用Rails.env

更新:this helpful discussion 给出了命令rails r "puts Rails.env",但我正在寻找一个不调用 Rails 本身的命令。

【问题讨论】:

    标签: ruby-on-rails linux environment-variables environment


    【解决方案1】:

    echo $RAILS_ENV 是对的。它可能未设置,因此默认为开发。这是在 Rails 代码库中完成的。

    $ export RAILS_ENV=development
    $ echo $RAILS_ENV #=> development
    

    在另一个控制台中

    # In a new window
    $ echo $RAILS_ENV
    $ rails runner "puts Rails.env" #=> development
    $ RAILS_ENV=test rails runner "puts Rails.env" #=> test
    

    没有设置RAILS_ENV 变量,rails 默认为开发

    这是 Bash 中的等价物。

    if [ -z "$RAILS_ENV" ]; then
      export RAILS_ENV="development";
    fi
    echo $RAILS_ENV
    

    【讨论】:

    • 所以rails r "puts Rails.env" 工作是因为它运行Rails,然后从该进程中找到环境变量(您之前设置的)?所以,基本上,环境变量不会在 Rails 运行之前(例如,最初安装 Rails 时)预加载到环境中,尽管如果您愿意,您可以自己预加载它?那么我可以(从命令行)发现当前运行的 Rails 实例的环境(例如在另一个终端中运行的服务器)吗?
    • 即,我可以发现(使用 Bash 命令)当前运行的 Rails 实例的环境吗?我很惊讶它不会出现在printenv 的输出中,除非我提前使用export RAILS_ENV=development(或testproduction 不起作用)。
    • 我更新了我的答案以拆分示例。当没有设置 RAILS_ENV 时,Rails 默认为开发。任何其他环境(测试、生产)都将设置 RAILS_ENV。
    • 这里是 rails 将 development 的默认设置为 env 的地方。 github.com/rails/rails/blob/…
    • 谢谢。仍然很好奇为什么 printenv 不显示变量,如果它是在运行的进程中设置的。
    猜你喜欢
    • 2011-07-16
    • 2021-03-16
    • 2019-08-14
    • 2019-07-19
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    相关资源
    最近更新 更多