7

我正在尝试创建 capistrano 任务,该任务将显示 .env 文件中的 dotenv 设置的变量

任务:

namespace :test do
  task :env do
    on roles(:app) do
      info ENV['TEST_ENV'].inspect
    end
  end
end

.env 文件:

TEST_ENV='confusing'

运行任务:

$ cap staging test:env
DEBUG [37c8a9e6] Running /usr/bin/env [ ! -d ~/.rbenv/versions/2.0.0-p353 ] on x.x.x.x
DEBUG [37c8a9e6] Command: [ ! -d ~/.rbenv/versions/2.0.0-p353 ]
DEBUG [37c8a9e6] Finished in 14.776 seconds with exit status 1 (failed).
 INFO nil

这是在一个正常工作的 capified rails 4 应用程序下(我可以运行 cap staging deploy 就好了)

谁能告诉我我错过了什么?

编辑:

由于可能不够清楚,我真正需要的是在我的本地机器上访问 .env ,实际情况:

我在 .env 中存储了一个秘密 api 密钥,它将用于在部署后通知外部 api 服务,api 密钥本身不应该存储在其他任何地方并且是应用程序专有的(每个应用程序都有自己的密钥)所以它不是将其永久存储在本地环境中是个好主意

4

2 回答 2

11

找到了,需要Dotenv.load在使用ENV之前使用,并require 'dotenv'在Capfile中添加

它实际上记录在 dotenv 自述文件中:https ://github.com/bkeepers/dotenv#sinatra-or-plain-ol-ruby

应该更仔细地阅读它..

于 2014-01-24T09:43:48.877 回答
1

此时,您的 rails 应用程序没有运行,

或者至少你的 capistrano 任务没有在 rails 上下文中运行。

因此,您的 .env 尚未加载到 ENV 中。

除此之外,您的 ruby​​ 代码(也就是您的任务)在客户端(您的机器)上执行。

获取环境变量 os 远程机器的一种方法是使用 bash:

    namespace :test do
      task :env do
        on roles(:app) do
          info caputure('echo $TEST_ENV')
        end
      end
    end
于 2014-01-23T20:52:41.327 回答