我的个人rails项目使用了一些API,我将API密钥/机密存储在config/environments/production中.yml与发展.yml作为全局变量.我现在想把这个项目推到github上,让其他人使用,但我不想让他们拥有这些敏感数据.我也不想把这个文件放进go .gitignore,因为它是应用程序运行所必需的.我考虑过把它们放在数据库的某个地方,但我希望找到更好的解决方案.

推荐答案

使用环境变量:TLDR

我认为@Bryce's comment提供了一个答案,我将把它冲洗掉.一种方法似乎是使用环境变量来存储敏感信息(API密钥字符串、数据库密码).所以,判断一下你的代码,看看哪些代码中有敏感数据.然后创建存储sensivite数据值的环境变量(例如在.bashrc文件中).例如,对于您的数据库:

export MYAPP_DEV_DB_DATABASE=myapp_dev
export MYAPP_DEV_DB_USER=username
export MYAPP_DEV_DB_PW=secret

现在,在本地框中,只要在需要敏感数据时引用环境变量即可.例如在数据库中.yml:

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: <%= ENV["MYAPP_DEV_DB_DATABASE"] %>
  pool: 5
  username: <%= ENV["MYAPP_DEV_DB_USER"] %>
  password: <%= ENV["MYAPP_DEV_DB_PW"] %>
  socket: /var/run/mysqld/mysqld.sock

我想是数据库.yml只在应用程序初始化或重启时被解析,所以这不会影响性能.因此,这将为您的本地开发和公开存储库提供解决方案.除go 敏感数据,你现在可以像私下一样为公众使用相同的存储库.如果你在VPS上,它也能解决这个问题.只需ssh连接到它,并在生产主机上设置环境变量,就像在开发框中那样.

同时,如果您的生产设置涉及到一个不需要动手的部署,您不能像Heroku那样通过ssh连接到生产服务器,那么您需要了解如何远程设置环境变量.对于Heroku来说,这是用heroku config:add完成的.因此,根据同一篇文章,如果你将S3集成到你的应用程序中,并且有来自环境变量的敏感数据:

AWS::S3::Base.establish_connection!(
  :access_key_id     => ENV['S3_KEY'],
  :secret_access_key => ENV['S3_SECRET']
)

只需让Heroku为其创建环境变量:

heroku config:add S3_KEY=8N022N81 S3_SECRET=9s83159d3+583493190

这个解决方案的另一个优点是它与语言无关,而不仅仅是Rails.适用于任何应用程序,因为它们都可以获取环境变量.

Ruby-on-rails相关问答推荐

如何判断是否定义了Rails模型?

在URL中将下划线更改为连字符Ruby on Rails

Grape api (rails) - 未初始化常量 Endpoints::TodoAPI (NameError)

是否可以使用 Turbo 帧更新 Rails 表单输入字段值?

具有 IN 子句的参数化查询在 ruby​​-on-rails 的 blazer 工具中无法按预期工作

Ruby on Rails 更新触发了 Mailer 函数中的 ArgumentError

如何在 to_json 中获取回形针图像的 url

在 Rails 中找不到关联问题

如何配置设计以使用自定义邮箱布局?

回形针图片网址

价格字段的字符串、小数或浮点数据类型?

默认情况下,如何在 Rails 中使 cookie 安全(仅限 https)?

在 Rails 中,如何处理多个选中的复选框,只需拆分 , 或?

如何从 ActiveRecord 中的每个组中获取最新记录?

未定义的方法 attr_accessible

如何在 Rails ActiveRecord 中指定日期小于今天的条件

反编译开发assets资源 管道

如何在两个字段上对 ruby​​/rails 进行排序?

如何为 Rails 迁移定义布尔字段

在 GIT 中处理 Rails db/schema.rb 文件的正确方法是什么?