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'