首页 > 解决方案 > 部署的 digitalocean 应用程序未读取环境变量

问题描述

我已经使用Ruby on Rails 映像将应用程序部署到 digitalocean 。默认情况下,它由名为 的用户设置rails。我的rails.service文件看起来像:

[Unit] 
Description=OneMathsExamQuestions 
Requires=network.target 

[Service] 
Type=simple 
User=rails 
Group=rails 
WorkingDirectory=/home/rails/one_maths_exam_questions/ 
ExecStart=/bin/bash -lc 'bundle exec puma' 
TimeoutSec=30s 
RestartSec=30s 
Restart=always 

[Install] 
WantedBy=multi-user.target                                                  

我需要在我的应用程序中使用一些环境变量。所以我在我的/home/rails/.bashrc/root/.bashrc文件中添加了一些行(我怀疑只有第一行是必要的,但似乎都不起作用):

export A="val1"
export B="val2"
...

现在:如果我打电话echo $A给终端,我会得到预期的输出。如果我进入 Rails 控制台并ENV["A"]得到预期的输出。但我的应用程序似乎运行不正确(所需的行为是连接到 Amazon S3;确切的错误并不重要)。

如果我进入我的控制器并明确记录环境变量,Rails.logger.debug ENV我只是得到ENV,并Rails.logger.debug ENV["A"]返回空字符串(我猜nil)。同样,如果我尝试做ENV["RAILS_ENV"]肯定会起作用的事情,我也会得到同样的结果。但是按预期Rails.env返回"development"

此外,如果我明确写

ENV["A"] = "val1"
ENV["B"] = "val2"
...

在我的应用程序中config/application.rb,该应用程序正常工作。但这显然不是一个永久的解决方案,因为我无法将其提交给版本控制。

我没有使用figarogem,我认为很多地方都在建议,但我不明白为什么我必须这样做,因为它在我的本地机器上运行良好。

标签: ruby-on-railsamazon-s3deploymentenvironment-variablesdigital-ocean

解决方案


好的,看起来如果我导出我的环境变量.profile然后它们被服务器拾取没问题。如果我从中删除它们,.bashrc则服务器没有问题,但我无法在终端中获取变量。我猜他们只是做不同的事情?


推荐阅读