Ruby on rails 4 在capistrano 3自定义任务中使用dotenv变量

Ruby on rails 4 在capistrano 3自定义任务中使用dotenv变量,ruby-on-rails-4,capistrano,capistrano3,Ruby On Rails 4,Capistrano,Capistrano3,我正在尝试创建capistrano任务,该任务将显示dotenv从.env文件中设置的变量 任务: namespace :test do task :env do on roles(:app) do info ENV['TEST_ENV'].inspect end end end $ cap staging test:env DEBUG [37c8a9e6] Running /usr/bin/env [ ! -d ~/.rbenv/versions/2.0.

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

任务:

namespace :test do
  task :env do
    on roles(:app) do
      info ENV['TEST_ENV'].inspect
    end
  end
end
$ 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
.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
这是一个正在运行的capifiedrails4应用程序(我可以很好地运行capstagingdeploy)

谁能告诉我我错过了什么

编辑:

由于可能不够清楚,我实际需要的是在本地计算机中访问.env,实际情况如下:

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


目前,您的rails应用程序尚未运行

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

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

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

获取环境变量os remote machine的一种方法是使用bash:

    namespace :test do
      task :env do
        on roles(:app) do
          info caputure('echo $TEST_ENV')
        end
      end
    end

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

事实上,dotenv自述文件中记录了这一点:


应该更仔细地阅读它。

谢谢你的回答,但我需要的是从我的本地计算机获取env,实际情况是我在其中存储了一个秘密api密钥。env将用于在部署后通知外部api服务,api密钥本身不应存储在任何其他地方,它是应用程序专用的(每个应用程序都有自己的密钥)通过在Bundler.require(..)之前添加到我的config/application.rb,这对我来说很有效。我还必须手动将.env和.env.staging文件添加到生产服务器上的shared/目录中,以绕过capistrano错误。