Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
640 views
in Technique[技术] by (71.8m points)

ruby on rails - AWS OpsWorks Environment variables not working

I am running Ubuntu 14.04 LTS 64 bit Rails Application and I am unable to access my App environment variables.

In OpsWorks App panel, I set my environment variables, say:

MYKEY: 1234

Then I save and deploy my app again to make these visible.

In my Rails app, or the rails console I get nil:

$ bundle exec rails c production
>ENV["MYKEY"]
=> nil

I have tried restarting the server. I'm not sure what I am missing, I have been using environment variables in other services.

How can I trace where these should be set?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

OpsWorks stores environmental variables in different places depending on what kind of app you're deploying. On Rails / Passenger they should be saved in the Apache config file #{your_app_name}.conf. (Source)

This means they aren't available in your normal shell environment.

I know the Node.js recipes stored everything in an /srv/www/#{app_name}/shared/app.env file... which is then sourced to pull in the environment to run the Node server. This implementation detail also meant you could write shell scripts that sourced that app.env file, then called some Node script or whatever.

Of course, Rails isn't Node. I have no idea if the environmental variables are also stored somewhere else or not: a quick look at the Rails recipes in the OpsWorks cookbooks didn't find anything obvious, but maybe I missed something.

Depending on the amount of modifications you have going on in your OpsWorks cookbook, you could create a deploy recipe that does something like this:

application_environment_file do user deploy[:user] group deploy[:group] path ::File.join(deploy[:deploy_to], "shared") environment_variables deploy[:environment_variables] end

(maybe adjusting the path)

Then to run your console, when you're SSHed into the server, do something like

sudo source /srv/www/my_app_name/shared/app.env; bundle exec rails console -e production or whatever.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...