Ruby on rails 4 在capistrano 3自定义任务中使用dotenv变量
我正在尝试创建capistrano任务,该任务将显示dotenv从.env文件中设置的变量 任务: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.
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错误。