ruby-on-rails - 部署的 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
,该应用程序正常工作。但这显然不是一个永久的解决方案,因为我无法将其提交给版本控制。
我没有使用figaro
gem,我认为很多地方都在建议,但我不明白为什么我必须这样做,因为它在我的本地机器上运行良好。
解决方案
好的,看起来如果我导出我的环境变量.profile
然后它们被服务器拾取没问题。如果我从中删除它们,.bashrc
则服务器没有问题,但我无法在终端中获取变量。我猜他们只是做不同的事情?
推荐阅读
- javascript - 该脚本不起作用 js - 单击添加类,第二次单击删除类
- javascript - 如何防止空条在 Chart.js 条形图中占据宽度
- authentication - django登录所需的装饰器不起作用
- javascript - If else 取决于脚本类型
- arrays - 有关均值代码中数组参数的错误消息
- python - 我找不到连接网格的所有点以形成三角形的方法,没有任何交叉
- r - How can I loop a list of models to get slope estimate
- javascript - Error: /snap/core/current/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found
- java - I have to enter my input twice to get the output
- azure-functions - Azure Function (REST API for Http Trigger & using Timer Trigger with Azure Data Factory)