2014-01-23 80 views
5

我試圖創建Capistrano的任務,將顯示一個變量被設置dotenv從.ENV文件使用dotenv Capistrano的3個自定義任務內變量

任務:

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部署就好了)

任何人都可以告訴我我錯過了什麼?

編輯:

,因爲它可能還不夠清楚,我真正需要的是在我的本地機器訪問.ENV,實際案例:

我店內祕密API密鑰。 env,它將用於部署後通知外部api服務,api密鑰本身不應該存儲在其他任何地方,並且是應用程序獨佔的(每個應用程序都有自己的密鑰),因此永久存儲它不是一個好主意本地環境

回答

10

我找到了,我需要使用ENV前使用Dotenv.load和Capfile添加require 'dotenv'

它在dotenv實際記錄自述:https://github.com/bkeepers/dotenv#sinatra-or-plain-ol-ruby

應該仔細閱讀它。

+0

這對我來說可以通過在Bundler.require(..)之前添加到我的config/application.rb中。我還必須手動將.env和.env.staging文件添加到生產服務器上的共享/目錄以繞過capistrano錯誤。 – earth2jason

1

在此那麼,你的rails應用程序沒有運行,

或者至少你capistrano任務沒有在rails上下文中運行。

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

除此之外,您的紅寶石代碼(又名您的任務)在客戶端(您的機器)執行。

一種方式來獲得環境變量操作系統遠程機器使用bash:

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

感謝您的回答,但是我的答案需要從我的本地機器獲取env,實際情況是我在.env中存儲了一個祕密API密鑰,它將用於在部署後通知外部api服務,api密鑰本身不應該存儲在其他任何地方並且它的應用程序是獨佔的(每個應用程序都有自己的密鑰) – Roy