我很好奇ENV [SOME_VARIABLE]如何在mac环境中尝试使用标准rails安装来查找数据。
我遇到了一个问题,我使用figaro宝石克服了它,但它没有回答我的问题,为什么它没有工作。我不再对解决问题感兴趣,但我有兴趣了解ENV [SOME_VARIABLE]如何找到该信息的具体细节。
答案 0 :(得分:3)
每当您在计算机上运行命令时,某些其他程序正在运行该命令。该父程序可以为该孩子提供设置;这些通常称为环境变量。
如果您在Mac上打开终端窗口,则需要查看 shell 。这是计算机的命令行界面。它在终端程序中运行,终端程序本身在其他内容中运行 - 您的Dock,或者来自Spotlight,或来自Finder(取决于您如何运行它)。通过扩展,如果您通过运行rails server
来运行Rails程序,那么您的shell将运行rails
命令。
有许多方法可以在shell中设置环境变量。如果您在终端中运行export
,您应该看到一大堆。你的shell会自动为你设置一些;常见的包括{1}用于您的主目录,HOME
用于查找可执行文件的位置,PATH
用于您的用户名。您可以通过添加USER
符号来打印这些值。您也可以使用$
命令设置自己的名称。
export
您使用bob@host ~$ echo $USER
bob
bob@host ~$ echo $HOME
/Users/bob
bob@host ~$ export MYVAR="whatever"
bob@host ~$ echo $MYVAR
whatever
设置的任何内容只有在您关闭该终端后才会存在,并且不会延续到新的终端。您可以将export
命令放在打开终端时运行的文件中; Bash是Mac上的默认shell,因此您可以编辑export
文件,使其在所有终端中都可用。
让我们回到你的~/.bashrc
命令。我们假设你想提供一个rails server
环境变量,这样你就不必将这个秘密委托给你的源代码控制了。您可以将它放在SECRET_KEY
中,如上所示。您也可以在运行服务器时通过在命令之前设置它来提供它:
.bashrc
您还可以使用Figaro和dotenv等加载项来管理文件中的设置。在Ruby内部,bob@host rails_app$ SECRET_KEY=abc1234 rails server
只是一个哈希 - 一个由Ruby本身提供给你的特殊哈希,但只是一个哈希。任何代码都可以添加键,删除键或更改其中的值。我没有看过dotenv或Figaro的代码,但我打赌他们正在做的事情 - 他们通过initializer加载自己,阅读文件配置环境变量,并将这些环境变量添加到ENV
。
答案 1 :(得分:0)
环境变量
为了简化Alex P
的回答,environment variables在操作系统中定义 - 这意味着任何希望使用它们的应用程序都可以使用它们:
环境变量是一组可以的动态命名值 影响运行进程在计算机上的行为方式。
Rails使用environment variables
有很多原因,但主要是出于安全考虑。如果您的应用程序使用API
密钥等,environment variables
允许您以仅在操作系统级别访问的方式定义敏感信息
这意味着如果您在被黑客攻击的主机上运行Rails应用程序,并且您的代码遭到破坏,黑客将无法完全访问您的数据,因为ENV变量存储在操作系统中。
的工作方式在Alex
的答案
-
Rails 4.1+的一个进步是引入了secrets
gem。这旨在为您提供与ENV
变量相同的功能,除非您能够将所有值保留在Rails应用程序的本地:
Rails 4.1在config文件夹中生成一个新的secrets.yml文件。通过 默认情况下,此文件包含应用程序的secret_key_base,但它 也可用于存储其他秘密,如访问密钥 外部API。
添加到此文件的秘密可通过以下方式访问: Rails.application.secrets。例如,具有以下内容 配置/ secrets.yml
development:
secret_key_base: 3b7cd727ee24e8444053437c36cc66c3
some_api_key: SOMEKEY