2014-01-23 12 views
5

Ich versuche Capistrano Aufgabe zu erstellen, die eine Variable von dotenv aus .env Dateimit dotenv Variablen innerhalb Capistrano 3 benutzerdefinierte Aufgabe

die Aufgabe zeigen:

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

.env Datei:

TEST_ENV='confusing' 

läuft die Aufgabe:

$ 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 

dies ist unter einer funktionierenden capified rails 4 app (ich kann cap staging bereitstellen, einfach gut)

kann mir jeder sagen, was fehlt mir bitte?

edit:

da nicht klar genug sein könnte, was ich brauche eigentlich ist .env in meinem lokalen Rechner zugreifen kann, der tatsächliche Fall:

Ich speichere einen geheimen api Schlüssel innen. env und es wird verwendet, um externen API-Dienst nach der Bereitstellung zu benachrichtigen, der API-Schlüssel selbst soll nirgendwo anders gespeichert werden und ist App-exklusiv (jede App hat ihren eigenen Schlüssel), so ist es keine gute Idee, es dauerhaft zu speichern lokales env

Antwort

10

ich es gefunden habe, ich brauche Dotenv.load zu verwenden, bevor ENV mit und fügen require 'dotenv' in Capfile

es in dotenv tatsächlich dokumentiert ist readme: https://github.com/bkeepers/dotenv#sinatra-or-plain-ol-ruby

sollte es sorgfältig mehr gelesen haben ..

+0

Dies funktionierte für mich durch Hinzufügen zu meiner config/application.rb kurz vor Bundler.require (..). Ich musste auch die .env- und .env.staging-Dateien manuell zum shared/-Verzeichnis auf dem Produktionsserver hinzufügen, um capistrano-Fehler zu umgehen. – earth2jason

1

An diesem Moment, Ihre Rails-Anwendung läuft nicht,

oder zumindest Sie capistrano Aufgabe läuft nicht in Rails-Kontext.

Aus diesem Grund ist Ihre .env noch nicht in ENV geladen.

Außerdem wird Ihr Ruby-Code (auch Ihre Aufgabe genannt) auf der Clientseite (Ihrem Computer) ausgeführt.

Eine Möglichkeit, die Umgebungsvariable os Remote-Computer zu erhalten, ist mit bash:

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

dank für Ihre Antwort, aber was ich Ich brauche den env von meinem lokalen Rechner, der eigentliche Fall ist, dass ich einen geheimen API-Schlüssel in .env speichere und er wird verwendet, um den externen API-Dienst nach der Bereitstellung zu benachrichtigen, der API-Schlüssel selbst sollte nirgendwo anders gespeichert werden und es ist App exklusiv (jede App hat einen eigenen Schlüssel) – Roy

Verwandte Themen