Ruby: 处理机密(环境变量)
本文件是高级用法指南的一部分。您可以在这里查看完整指南:深入了解 Ruby 部署。
👋 欢迎来到 Stackhero 文档!
Stackhero 提供现成的 Ruby cloud 解决方案,具有众多优势,包括:
- 通过简单的
git push在几秒钟内 部署您的应用程序。- 使用您自己的域名,并享受 HTTPS 证书的自动配置以增强安全性。
- 享受 自动备份、一键更新,以及简单、透明和可预测的定价带来的安心。
- 通过专用私有 VM获得最佳的性能和强大的安全性。
节省时间并简化您的生活:只需 5 分钟即可试用 Stackhero 的 Ruby cloud hosting 解决方案!
在某些时候,您需要管理诸如数据库和第三方服务的令牌或密码等机密。安全存储这些机密至关重要。避免将机密直接嵌入到您的存储库或代码中,因为这会带来严重的安全风险。
环境变量提供了两个显著的好处:
- 您的机密不会存储在 Git 存储库中,从而降低了如果有人访问您的源代码的风险。
- 您可以为不同的环境使用不同的凭据。例如,在生产中连接到您的生产数据库,而在开发中使用开发数据库。
为开发设置环境变量
对于开发,在项目的根目录下创建一个 .env 文件。此文件将被 Git 排除,因此永远不会被提交。使用 dotenv gem 自动加载 .env 文件。
首先,将 dotenv-rails gem 添加到您的 Gemfile 中:
# Gemfile
gem 'dotenv-rails', groups: [:development, :test]
然后安装 gem:
bundle install
接下来,在项目的根目录下创建一个 .env 文件并添加您的变量:
RAILS_ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
# ...
最后,确保 .env 文件被 Git 忽略:
echo '.env*' >> .gitignore
为 staging 和生产设置环境变量
对于 staging 和生产,.env 文件既不安全也不实用,因为它不能存储在 Git 存储库中。相反,Stackhero 提供了一种安全的解决方案,可以直接在您的 Ruby 服务配置中管理环境变量。
您可以通过选择您的 Ruby 服务并点击 "Configure" 按钮,在 Stackhero 仪表板中设置这些变量。
访问环境变量
在 Ruby 中,您可以使用 ENV 轻松访问环境变量。例如,要检索 DATABASE_PASSWORD,请使用:
ENV['DATABASE_PASSWORD'] # => 'secretPassword'
以下是如何使用环境变量连接到 RabbitMQ 服务器的示例:
require 'bunny'
class RabbitMQClient
def initialize
@connection = Bunny.new(hostname: ENV['RABBITMQ_HOST'],
username: ENV['RABBITMQ_USERNAME'],
password: ENV['RABBITMQ_PASSWORD'])
@connection.start
end
def publish(queue_name, message)
channel = @connection.create_channel
queue = channel.queue(queue_name)
channel.default_exchange.publish(message, routing_key: queue.name)
end
def close
@connection.close
end
end
在开发平台上,您的 .env 文件可能包括:
RABBITMQ_HOST='127.0.0.1'
RABBITMQ_USERNAME='developmentUser'
RABBITMQ_PASSWORD='developmentPassword'
对于生产和 staging,请在 Stackhero 仪表板的 Ruby 服务配置下定义您的环境变量,如下所示:
RABBITMQ_HOST='<XXXXXX>.stackhero-network.com'
RABBITMQ_USERNAME='production'
RABBITMQ_PASSWORD='secretProductionPassword'