部署的digitalocean应用无法读取环境变量

时间:2019-03-22 12:43:26

标签: ruby-on-rails amazon-s3 deployment environment-variables digital-ocean

我已经使用Ruby on Rails image将应用部署到了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中,该应用程序正常运行。但这显然不是永久性的解决方案,因为我无法将其提交给版本控制。

我没有使用figaro gem,我认为很多地方都建议这样做,但是我不知道为什么要这样做,因为它在我的本地计算机上工作得很好。

1 个答案:

答案 0 :(得分:0)

好的,好像我将环境变量导出到eps一样,那么服务器就可以正常使用它们了。如果我从.profile中删除它们,则服务器没有问题,但是无法在终端中获取变量。我猜他们只是在做不同的事情?

相关问题