如何在Rails 4.1中使用secrets.yml作为API_KEYS?

2024-05-27

在我最近的一个项目中,我开始于.gitignoring包含机密和环境变量的文件。因此,除了包含第三方机密(例如 Stripe、Twitter API 或 Facebook Graph 或内部 api_keys 等)的文件外,整个项目都致力于存储库./config/initializers/secret_token.rb file.

现在我正处于项目即将上线的时刻(兴奋!),我需要使用 Capistrano 将所有环境变量移植到生产服务器上,即cap production deploy.

[编辑 4:2018 年] 对于initializers/secret_token.rb,很明显Rails 4.1有一种新的处理方式Secrets.yml 文件 http://guides.rubyonrails.org/upgrading_ruby_on_rails.html#config-secrets-yml将 :secret_key_base 值拉入生产服务器。在这里,我推荐使用Capistrano-秘密-yml https://github.com/capistrano-plugins/capistrano-secrets-ymlgem 开箱即用,使用起来非常简单。

剩下的就是将其他秘密(如 API_KEYS、APP_ID 等)传送到生产服务器而不将任何这些秘密检查到存储库中的方法。如何做到这一点,最推荐/最安全的方法或最佳实践是什么?

注意:随着问题的进展,我将对其进行编辑/我会变得更加清晰。

EDIT1:服务器是 DigitalOcean 上的 Ubuntu/Linux VPS [Denise 的答案,如下]。

EDIT2: env_variables/secrets 可以通过secrets.yml 转移到服务器吗?毕竟,会话的 Secret_token 并不是唯一的秘密! [在Edit3上回答]

编辑3:是的!可以根据此通过 Secrets.yml 发送 API_keysblog http://nycdevshop.com/blog/10。稍后会分享我的发现。 :-)


第一条规则:请勿办理登机手续secrets.yml进入回购协议。

好吧,这是如何secret.yml会看起来:

development:
  secret_key_base: 6a1ada9d8e377c8fad5e530d6e0a1daa3d17e43ee... 
  # Paste output of $ rake secret here for your dev machine.

test:
  secret_key_base: _your_secret_ as above

production:
  secret_key_base: <%= secure_token %>


  STRIPE_PUBLISHABLE_KEY: 'Put your stripe keys for production'
  STRIPE_SECRET_KEY: 'Put actual keys for production here'
  FB_APP_SECRET: 'same as above'
  FB_CALLBACK_URL: 'FB url here'
  FB_CALLBACK_UPDATE_URL: 'FB url here'
  GOOGLE_KEY: 'Put your keys for production'
  GOOGLE_SECRET: 'same as above'
  TWITTER_KEY: 'same as above'
  TWITTER_SECRET: 'same as above'
  TWITTER_USERNAME: 'same as above'
  LINKEDIN_KEY: 'same as above'
  LINKEDIN_SECRET: 'same as above'

请注意secure_token在那里production:堵塞。在生产服务器上,我使用初始化程序来动态生成secret_tokens https://stackoverflow.com/questions/21673936/how-to-dynamicly-generate-secret-tokens-in-rails-4-1-with-secrets-yml?rq=1即时。

旁注:请注意 .yml 文件内的空格和制表符。它必须具有正确的格式和间距(例如“:”符号后有一个空格)。

要在生产环境中进行设置,您可以直接从本地 scp 文件或使用Capistrano-秘密-yml https://github.com/capistrano-plugins/capistrano-secrets-yml gem.

这是行不通的。请参阅下面@OddityOverseer 的答案的更新方法。

访问应用程序中的环境变量environments/production.rb use:

FB_APP_SECRET            = ENV['FB_APP_SECRET']
FB_CALLBACK_URL          = ENV['FB_CALLBACK_URL']
FB_CALLBACK_UPDATE_URL   = ENV['FB_CALLBACK_UPDATE_URL']
GOOGLE_KEY               = ENV['GOOGLE_KEY']
GOOGLE_SECRET            = ENV['GOOGLE_SECRET']
TWITTER_KEY              = ENV['TWITTER_KEY']
TWITTER_SECRET           = ENV['TWITTER_SECRET']
TWITTER_USERNAME         = ENV['TWITTER_USERNAME']
LINKEDIN_KEY             = ENV['LINKEDIN_KEY']
LINKEDIN_SECRET          = ENV['LINKEDIN_SECRET']

2016 年 8 月更新:

访问应用程序中的环境变量environments/production.rb use:

FB_APP_SECRET            = Rails.application.secrets.FB_APP_SECRET
FB_CALLBACK_URL          = Rails.application.secrets.FB_CALLBACK_URL
FB_CALLBACK_UPDATE_URL   = Rails.application.secrets.FB_CALLBACK_UPDATE_URL
GOOGLE_KEY               = Rails.application.secrets.GOOGLE_KEY
GOOGLE_SECRET            = Rails.application.secrets.GOOGLE_SECRET
TWITTER_KEY              = Rails.application.secrets.TWITTER_KEY
TWITTER_SECRET           = Rails.application.secrets.TWITTER_SECRET
TWITTER_USERNAME         = Rails.application.secrets.TWITTER_USERNAME
LINKEDIN_KEY             = Rails.application.secrets.LINKEDIN_KEY
LINKEDIN_SECRET          = Rails.application.secrets.LINKEDIN_SECRET

就是这样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Rails 4.1中使用secrets.yml作为API_KEYS? 的相关文章

  • 油猴安全性如何?

    我从未真正使用过greasemonkey 但我正在考虑使用它 考虑到 GreaseMonkey 允许您让互联网上的随机人改变您喜爱的网站的行为 它的安全性如何 他们可以窃取我的密码吗 看看我的私人数据 做我不想做的事吗 油猴安全性如何 Th
  • 如何使用 Ruby 2.7.0 修复 Rails 的警告消息

    有没有人解决这个问题Ruby 2 7 0 I used rbenv并安装了 Ruby v2 7 0 然后使用创建了一个 Rails 项目Rails v6 0 2 1 目前 通过运行之一 rails s rails s u puma rail
  • 用于 RESTful 轨道应用程序的简单面包屑

    是否有任何辅助方法 除了默认 Rails 面包屑导航 http wiki rubyonrails org rails pages Breadcrumbs 为特定页面动态生成面包屑导航 而无需在 RESTful 应用程序中传递琐碎的参数 也就
  • 通过使用 Minitest 的 Rails,如何设置 RuboCop 在每次使用 rake 运行测试时自动运行?

    当我运行以下命令时 我想要RuboCop https github com bbatsov rubocop在测试运行之前检查我指定的应用程序目录 bundle exec rake test 我添加了以下任务lib tasks test ra
  • 使用鼠标检测的反验证码

    我想知道是否可以为仅使用 javascript 的表单创建一个安全的人体检测机制 不使用验证码 来检测鼠标移动 因为 jquery 或操作系统代码都可以移动鼠标 我是这么告诉的 这是我的计划 使用 jQuery 我可以检测鼠标是否已移动 然
  • Rails:关于产量

    我在a中看到了一些代码导轨 v2 3 app In layout car general html erb 这个视图是由 cars controller 中的方法调用的 我看到了代码 var some car new Object 有两个问
  • 错误“未初始化常量 AWS (NameError)”

    它说 AWS 未初始化 我正在使用 aws sdk core gem 我尝试使用 aws sdk gem 代替 问题仍然存在 这是initializers aws rb 文件 AWS config access key id gt ENV
  • 设备注册控制器获取零资源的自定义操作

    基本上我想要有两个单独的操作来更改密码和更改电子邮件 而不是只有一个 我已经更新了我的路由以指向继承自 Devise RegistrationsController 的新控制器 我的路线 rb devise for users contro
  • Twitter Bootstrap 中下拉链接的模态

    我正在尝试从下拉菜单中的链接进行模式启动 该模式似乎已启动 网站变为灰色 但看不到 来自不在下拉列表中的常规链接的模态工作得很好 我对 jquery 进行了愚弄 但由于我是 jquery 的新手 所以没有任何结果 这是我的网站代码
  • kaminari ajax 分页不更新分页

    我正在使用 kaminari gem 在 Rails3 中实现分页 我一直在关注github上的这段代码https github com amatsuda kaminari example commits ajax https github
  • save_and_open_page 已停止提供我的 CSS

    我的测试设置工作得很好 每当我打电话时 都能提供正确格式的 css 页面save and open page从测试中 然后 我设置了一些 javascript 测试 并对我的设置进行了一些更改 抱歉 我无法详细说明所有内容 我没有足够详细地
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • Rails 3 Mechanize - SocketError:getaddrinfo:主机或名称未知

    我正在使用 mechanize 但出现此错误 有人可以帮帮我吗 我已将元刷新设置为 true 错误日志 SocketError getaddrinfo Host or name not known form C Ruby192 lib ru
  • 评估 CRC-32 实现中的差异

    我见过相同基本 CRC 32 算法的许多不同实现 如下所示 int remain int sbox SIZESBOX int dividend int bit for dividend 0 dividend lt SIZESBOX divi
  • Android - 在sqlite数据库中存储敏感数据

    我需要将敏感数据存储在 Android 应用程序的 sqlite 数据库中 我如何确定这些数据非常安全 我知道我可以使用密钥加密数据 但是我将该密钥存储在哪里 我也不想要求用户填写密钥 我只是希望它能够自行工作 因为我害怕逆向工程 所以我也
  • 如何在生产服务器中运行 sidekiq?

    我有一个带有apache passenger的服务器 我将如何奔跑sidekiq在生产中 运行所需的任何配置 bundle exec sidekiq Thanks bundle exec sidekiq d L log sidekiq lo
  • 带回形针、导轨的水印图像 4

    我一直在尝试按照中列出的答案向我的图像添加水印带有回形针的水印 https stackoverflow com questions 13517757 watermark with paperclip 水印 rb module Papercl
  • 无法使用 Rails 6 Actiontext 渲染 youtube 嵌入 iframe

    我已经设置了一个自定义嵌入模型 这样我就可以将 Instagram 或 YouTube 嵌入等内容添加到我网站上的 ActionText 内容中 它适用于 Instagram 嵌入 但不适用于 YouTube 作为参考 我要显示的 yout
  • 在rails生成脚手架中跳过JSON格式

    当您使用类似命令生成 Rails 脚手架时rails g scaffold Thing有什么办法可以避免变得烦人吗 respond to do format format html index html erb format json re
  • 升级到 Rails 6 时是否有一种编程方法可以检测 Zeitwerk::NameError?

    我目前正在将旧的 Rails 应用程序迁移到 Rails 6 好像项目中有些文件和里面定义的类不一致 运行应用程序测试时我没有看到此错误 但部署后我收到如下错误 Zeitwerk NameError expected file app my

随机推荐

  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 为什么 Cassandra 客户端在生产中没有 epoll 时会失败? [复制]

    这个问题在这里已经有答案了 当我在本地运行服务时 我收到一条警告 指出 epoll 不可用 因此它使用 NIO 很公平 当我将其部署到 Kubernetes 中时 我得到了以下信息 这导致服务无法运行 2017 03 29T19 09 22
  • 找出段落中出现的单词

    sentence Alice was not a bit hurt and she jumped up on to her feet in a moment words Alice jumped played 我可以使用filterpyth
  • APACHE POI 从 Java 中的 Excel 获取精确的字体颜色

    在 Excel 工作表中 如何使用 Java 中的 Apache POI 获取准确的字体颜色值 我试图通过使用来获取字体颜色 org apache poi ss usermodel Font f book getFontAt style g
  • obj[] 和 string[] 作为参数

    我在用Microsoft FSharp Reflection FSharpValue MakeUnion这需要一个Reflection UnionCaseInfo and an obj 可以为空 作为参数 但是 我得到了Type misma
  • 创建新类别的优点和缺点是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这可能是一个非常基本的问题 但这是我在学习更多有关 Actionscript 3 的过程中实际遇到的问题 然而 我的第一个问题非常笼统 什么时候
  • 何时在 Gevent 中使用线程池

    我注意到 Gevent 有线程池对象 有人可以向我解释何时使用线程池以及何时使用常规池吗 gevent threadpool 和 gevent pool 有什么区别 当你有一段需要很长时间运行 几秒钟 并且不会导致 greenlet 切换的
  • AVAudioSessionPortBluetoothHFP、A2DP 和 LE 有什么区别?

    Apple 中记录了三种不同的蓝牙相关音频端口类型AVAudioSessionPort 描述 https developer apple com library ios documentation AVFoundation Referenc
  • 如何在SQL中查找单元格中的重复单词

    我有一个名为 situation 和 entityid 的列 Entityid Situation 1234 In the the world of of 3456 Total universe is is a 任何人都可以给我查询以找到这
  • Time 方法在另一个线程中执行并在超时时中止

    您好 我正在尝试异步运行方法 以便计算持续时间并在超过超时时取消该方法 我尝试使用异步和等待来实现这一点 但没有运气 也许我过度设计了这个 任何输入都会受到赞赏 应该注意的是 我无法更改接口 TheirInterface 因此得名 到目前为
  • 云存储 API 的错误导入“系统调用”

    我正在按照以下说明进行操作https cloud google com appengine docs go googlecloudstorageclient download开始将一些代码从现已弃用的文件 API 迁移到新的 Cloud S
  • 了解C/C++中函数调用的堆栈框架? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我也是 C C 和汇编语言的新手 这
  • 使 .git 目录 web 不可访问

    我有一个网站 我使用 github 闭源 来跟踪更改和更新网站 唯一的问题是 git 目录似乎可以通过网络访问 我怎样才能停止这个并且仍然能够使用 git 我应该使用 htaccess 吗 我应该更改 git 的权限吗 把这个放在一个 ht
  • std::regex 的行为不一致

    我有以下问题 std regex如果我传递结果 行为会有所不同boost filesystem path string vs 将结果存储在中间字符串变量中 第一个将返回一个被截断的匹配 并且稍后不被接受std stoull 抛出 inval
  • jQuery:根据鼠标位置移动的全屏“背景”图像[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试实现一个根据鼠标位置移动的全屏背景 例如 如果您将鼠标移动到左上角 视口将显示图像的左上角以
  • /getaddrinfo 处出现 SocketError:未提供节点名或服务名,或未知 padrino

    我正在尝试使用 padrino 为我的亚马逊环境构建仪表板 但是当我在控制器中尝试以下代码时 get index map gt do AWS config access key id ACCESS KEY secret access key
  • Flutter 图像选择器明确请求许可

    图像选择器包说 无需配置 该插件应该开箱即用 不再需要添加 android requestLegacyExternalStorage true 作为属性 AndroidManifest xml 中的标记 如 image picker 所示
  • 如何与他人共享 xCode .app 产品

    我在 xCode 中构建了一个非常简单的应用程序 并希望与其他不运行 xCode 的计算机共享它 这是一个简单的打印到控制台应用程序 我如何在不通过 iTunesconnect 的情况下与他们分享 看起来很浪费 有没有办法向他们发送可以安装
  • PostgreSQL 中 JSON 数据类型的大小限制

    有谁知道 PostgreSQL 9 2 中 JSON 数据类型的大小限制是多少 查看 PostgreSQL 9 2 1 的源代码 Source postgresql 9 2 1 src backend utils adt json c In
  • 如何在Rails 4.1中使用secrets.yml作为API_KEYS?

    在我最近的一个项目中 我开始于 gitignoring包含机密和环境变量的文件 因此 除了包含第三方机密 例如 Stripe Twitter API 或 Facebook Graph 或内部 api keys 等 的文件外 整个项目都致力于