我已经使用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,我认为很多地方都建议这样做,但是我不知道为什么要这样做,因为它在我的本地计算机上工作得很好。
答案 0 :(得分:0)
好的,好像我将环境变量导出到eps
一样,那么服务器就可以正常使用它们了。如果我从.profile
中删除它们,则服务器没有问题,但是无法在终端中获取变量。我猜他们只是在做不同的事情?