TL; DR:如何将一组键/值对从文本文件导出到shell环境中?
为了记录,下面是问题的原始版本,带有示例.
我正在用bash编写一个脚本,用于解析某个文件夹中包含3个变量的文件,这是其中之一:
MINIENTREGA_FECHALIMITE="2011-03-31"
MINIENTREGA_FICHEROS="informe.txt programa.c"
MINIENTREGA_DESTINO="./destino/entrega-prac1"
Run Code Online (Sandbox Code Playgroud)
该文件存储在./conf/prac1中
我的脚本minientrega.sh然后使用以下代码解析文件:
cat ./conf/$1 | while read line; do
export $line
done
Run Code Online (Sandbox Code Playgroud)
但是当我minientrega.sh prac1在命令行中执行时,它不会设置环境变量
我也试过使用,source ./conf/$1但同样的问题仍然适用
也许有其他方法可以做到这一点,我只需要使用我传递的文件的环境变量作为我的脚本的参数.
在其他rails项目中,我有一个本地database.yml,在源代码库中只提交database.sample文件.在部署时,会使用capistrano脚本将database.yml的共享版本符号链接到所有版本.
当部署到heroku时,使用git并且它们似乎完全覆盖database.yml并在内部执行某些操作.
这对于database.yml来说一切都很好,但是如果我在config/s3.yml中有s3配置怎么办呢.我将我的项目放在github上,所以我不想提交s3.yml,每个人都可以看到我的凭据.它宁可提交一个示例s3.sample,人们将使用自己的设置覆盖它们,并在我的工作目录中保留一个本地s3.yml文件.
处理这个问题的最佳方法是什么?
所以我试图让我的rails应用程序部署在生产模式,但我得到错误:缺少secret_token和secret_key_base'生产'环境,设置这些值config/secrets.yml
我的secrets.yml文件是预期的:
development:
secret_key_base: xxxxxxx
test:
secret_key_base: xxxxxxx
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
但即使在google和研究之后,我也不知道如何处理生产密钥库.大多数信息假设我有一定的背景知识,但现实是我是一个菜鸟.
任何人都可以向我解释如何设置我的密钥并使其在生产模式下工作?
所以我正在尝试在生产中部署我的rails应用程序.当我进入页面时,我收到500错误.当我转到我的错误日志时,我收到以下错误:
Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`)
Run Code Online (Sandbox Code Playgroud)
我正在运行Rails 4.1,我的config/secrets.yml看起来像这样:
development:
secret_key_base: <development key>
test:
secret_key_base: <test key>
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
我运行rake secret获取密钥并将导出放入我的bash_profile并获取它.我运行了rake资产:预编译成功.然而,我仍然一直在犯这个错误.有任何想法吗?
更新:我试图更新提供的错误消息,以提供更好的信息....并且消息没有更新.然后我尝试将密钥直接添加到yml文件,而不是使用环境变量,仍然没有骰子.我在hostmonster上运行,所以我无法重新启动服务器.....但有些东西告诉我需要做什么...
更新2:彻夜难眠后,这个问题似乎不再是问题.它一定是某种缓存.现在我的问题是它试图使用我几天前为我的数据库更改的旧配置.如果我弄清楚如何使缓存无效,我将在此处发布并将其标记为答案.如果其他人知道该怎么做,请告诉我,我会将其标记为答案.我使用HostMonster作为我的托管,并按照他们在他们的网站上的步骤来托管我的rails应用程序.
随着secrets.yml文件的发布,我删除了对Figaro的依赖并将我的所有密钥移到secrets.yml并将该文件添加到.gitignore.
但是当我试图推送到Heroku时,Heroku表示他们需要在我的仓库中使用该文件来部署网站.这是有道理的,但如果我可以避免它,我不希望我的密钥在git中.
使用Figaro,我会运行一个rake任务,将密钥部署到heroku作为env变量,并将application.yml保存在.gitignore中.显然,我不能再这样做了.那我该怎么处理呢?
有人可以帮忙吗?我的堆栈是ubuntu-server 14.04,其中包含nginx/passenger和ruby 2.2.2.我无法让我的项目在生产中工作.一切都在开发中运行良好.
secrets.yml
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
secret_token: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
服务器
server {
listen 80;
server_name logvs.local;
passenger_enabled on;
passenger_app_env development;
root /var/www/logvs/public;
}
Run Code Online (Sandbox Code Playgroud)
error.log中
App 2532 stderr: [ 2015-06-07 22:56:01.4724 2610/0x000000014d6b00(Worker 1) utils.rb:85 ]: *** Exception RuntimeError in Rack application object (Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml`) (process 2610, thread 0x000000014d6b00(Worker 1)):
App 2532 stderr: from /home/username/.rvm/gems/ruby-2.2.2/gems/railties-4.2.1/lib/rails/application.rb:534:in `validate_secret_key_config!'
App 2532 stderr: from /home/username/.rvm/gems/ruby-2.2.2/gems/railties-4.2.1/lib/rails/application.rb:246:in `env_config'
App 2532 stderr: from /home/username/.rvm/gems/ruby-2.2.2/gems/railties-4.2.1/lib/rails/engine.rb:514:in `call' …Run Code Online (Sandbox Code Playgroud) 我看到了这个解决方案的所有答案,但没有为我工作.
1 - 我的配置部署与DigitalOcean(Capistrano 3,Nginx和Puma)的本教程相同,部署成功,我的网页出错:
发生了未处理的低级错误.应用程序日志可能包含详细信息
在日志中:
机架应用程序错误:#<RuntimeError:缺少
secret_token和secret_key_base'生产'环境,请在config/secrets.yml>中设置这些值
2 - 在我的Droplet或VPN中,我使用rake secret文件中的key()创建了变量./bashrc
export SECRET_KEY_BASE=XXXXXX
Run Code Online (Sandbox Code Playgroud)
文件 /config/secrets.yml是默认的
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
有了这个env变量,我检查了比这工作(echo $SECRET_KEY_BASE或printenv | grep SECRET_KEY_BASE)
3 - 重新启动Puma和Nginx并且此错误未解决后,我不知道检查或调试此错误的最佳方法是什么.
是否本教程不使用此解决方案的工作?
deployment capistrano ruby-on-rails nginx environment-variables
secrets.yml即使我将Rails作为JSON API运行,也似乎没有用于检查的配置选项
Puma发现了这个错误:
缺少
secret_token和secret_key_base'生产'环境,在config/secrets.yml(RuntimeError)中设置这些值
任何线索该怎么办?我想我可以生成一个假人secret_key_base并继续前进
我使用puma而不是rails s工作一段时间,但随后在开发和更改代码和刷新时,刷新不起作用,延迟了很长时间.我以为它已经崩溃了什么,所以我杀死了puma服务器,但随后它说'优雅地关闭'几分钟,所以我杀死了终端窗口.然后,在我尝试使用puma它的新窗口中说主机已被占用,因此该过程仍在运行.无法找到它的位置,我重新启动了我的电脑.重启后,我现在得到错误,An unhandled lowlevel error occured. The application logs may have details.或者PG::ConnectionBad fe_sendauth: no password supplied取决于我是否运行puma或RAILS_ENV=development puma.
这些反应似乎都没有意义,而且这个错误我看到其他人都有rake db:migrate.所以我尝试迁移数据库并得到了同样的错误PG::ConnectionBad: fe_sendauth: no password supplied
在尝试运行服务器时的日志中:Rack app error: #<RuntimeError: Missingsecret_key_base for 'production' environment, set this value inconfig/secrets.yml>
现在这对我来说是最不合理的,因为为什么puma默认运行生产环境并需要特殊命令才能在开发中运行?
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Run Code Online (Sandbox Code Playgroud)
依赖于Heroku来传递secret_key_base是我的假设,所以它不适用于开发.但后来甚至RAILS_ENV=development puma抛出
PG::ConnectionBad
fe_sendauth: no password supplied
Run Code Online (Sandbox Code Playgroud)
一条似乎对我没有帮助的痕迹:
activerecord (4.1.7) lib/active_record/connection_adapters/postgresql_adapter.rb:888:in `initialize'
activerecord (4.1.7) …Run Code Online (Sandbox Code Playgroud) 当我导航到我的Rails生产站点时,我得到:
*** Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) (process 29032, thread 0x9b81a60(Worker 1)):
Run Code Online (Sandbox Code Playgroud)
我看到这个错误的许多解决方案是导出环境变量 export SECRET_KEY_BASE='a long string generated by running rake secret
然而,这对我不起作用(我得到同样的错误).我必须包含config/environments/production.rb:
config.secret_key_base = "a long string generated by running rake secret"解决此错误.
我的问题是,这是正确的方法,因为实践是不提交密钥?有没有办法让Rails从环境变量中读取?
我正在使用Ubuntu 14.04.1,Apache2,Phusion Passenger堆栈.
deployment ×3
heroku ×3
ruby ×3
nginx ×2
passenger ×2
bash ×1
capistrano ×1
config ×1
postgresql ×1
puma ×1
rake ×1
secret-key ×1
variables ×1
yaml ×1