我正在尝试创建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
这是一个工作上限的rails 4应用程序(我可以运行cap staging deploy就好了)
任何人都可以告诉我,我错过了什么?
编辑:
因为它可能不够清楚,我真正需要的是在我的本地机器中访问.env,实际案例:
我在.env中存储一个秘密api密钥,它将用于在部署后通知外部api服务,api密钥本身不应该存储在其他任何地方并且应用程序是独占的(每个应用程序都有自己的密钥)所以将它永久存储在本地环境中并不是一个好主意
答案 0 :(得分:11)
我发现它,我需要在使用ENV之前使用Dotenv.load
并在Capfile中添加require 'dotenv'
它实际上记录在dotenv自述文件中:https://github.com/bkeepers/dotenv#sinatra-or-plain-ol-ruby
应该仔细阅读..
答案 1 :(得分: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