Tag: Rails

如何以.p12文件的形式获取Apple Push Notification Service证书,以便将其转换为.pem文件

如果有任何编写地狱的经验会使我烦恼和写作,那么我想这将是一个荒唐的过程,并且会产生大量无益的Google结果……例如为我的Rails以正确的文件类型创建Apple Push Notification Service证书+ iOS项目。 (此过程需要macOS。) TL; DR:使用macOS的钥匙串访问权限创建证书签名请求,将其上传到Apple,下载生成的.cer,将其添加到钥匙串,将.cer从钥匙串中导出为.p12,然后使用Terminal转换.p12到一个.pem文件中。 *哇!* 创建证书签名请求 打开“钥匙串访问”,然后在菜单栏中选择“钥匙串访问”>“证书助手”>“从证书颁发机构请求证书”。 选择此选项将弹出“证书助手”窗口。 输入与您的Apple Developer帐户关联的Apple ID,您的姓名,并将最终选项更改为“ Saved to disk”。 单击“继续”将允许您命名证书申请并选择想要保存证书的文件夹。 单击“保存”后,您应该在选定的目标文件夹中找到一个名为CertificateSigningRequest.certSigningRequest的文件。 下一步,我们将其上传到Apple。 下载您的.cer 登录到Apple Developer帐户后,系统会显示帐户概述。 幸运的是,正确的选择是放在最前面和最中心:单击“证书,标识符和配置文件”。 这将带您到将要管理iOS证书的区域。 您会在屏幕左侧找到相关的菜单选项。 此菜单包括一个UX陷阱,使我花了数小时徒劳无果。 在“证书”类别下,您会找到“ APNs身份验证密钥”。单词“ certificate”和“ APNS”可能会导致您得出以下结论:您应该单击“ APNs身份验证密钥”按钮才能创建APNS证书。 ,但是您会错的。 可怕的,可怕的错误。 并且拥有一个无用的(无论出于我们的目的,无论如何).p8文件。 取而代之的是,您将忽略您的直觉,转到下一个类别“标识符”,然后单击“应用程序ID”。这将向您显示与帐户相关联的所有应用程序包ID的列表。 选择将用于APNS的应用程序,然后将展开“应用程序服务”列表。 向下滚动并单击“编辑”。 这将带您进入一个页面,该页面允许您设置和配置应用程序服务。 向下滚动,直到看到标有“推送通知”的服务。 我已经启用了推送通知并创建了两个证书,所以您的屏幕可能看起来有些不同。 单击复选框以启用“推送通知”(如果尚未启用),然后(取决于您要创建开发证书还是生产证书),单击“创建证书”。 然后,您将进入一个页面,解释如何创建证书签名请求(我们已经在上面完成了)。 单击“继续”,上传您的CSR,然后下载生成的.cer文件。 已经累了吗? 我也是。 我们到了一半! 将您的.cer转换为.p12 通过双击或将其拖动到“钥匙串”窗口中,使用“钥匙串访问”打开.cer。 然后使用左侧面板导航到“我的证书”并找到您刚刚添加的证书。 (它也可以添加到“证书”中。) 选择/突出显示/单击您的证书,然后右键单击并选择“导出”,或者在菜单栏中选择“文件”>“导出项目”。 在出现的弹出窗口中,命名您的证书,选择它的目的地,然后选择.p12文件类型。 系统会要求您使用密码来保护此证书(可能是个好主意),但您可以根据需要将其保留为空白。 […]

使用Kue排队作业

向开发人员询问有关Redis的信息,大多数人会告诉您这是键/值存储。 然而,不仅如此; 这也是实现作业队列的非常有用的机制。 将工作单元封装为作业有很多优点: 作业可以在后台运行 。 在Web应用程序的上下文中,这意味着您可以处理请求而无需等待作业完成。 您可以延迟作业的执行 ,将其搁置以在以后的日期或时间运行。 作业可以在与 “主”应用程序不同的上下文中运行,可以是不同的进程或线程,环境甚至是不同的服务器。 如果作业失败,则可以将应用程序配置为多次重试 。 您还可以优先处理作业 。 假设您急需通过电子邮件发送故障通知,同时您的应用程序正在发送大量新闻通讯。 设置较高的优先级,可以说“它将跳到队列的最前面”。 许多队列实现还提供了监视作业的能力; 它们的状态-例如,它们是成功还是失败,或者正在等待重试-以及监视长时间运行的作业的进度。 现在,我们已经了解了作业的一些优点,让我们看一下在Node.js应用程序中实现作业的一种方法; 使用K。 介绍K Kue是一个Node.js程序包,它提供了Redis队列的抽象级别,并提供了一些有用的工具来监视您的作业。 从最基本的角度来看,Kue允许您将代码单位定义为作业,并且在幕后将其放置在Redis队列上的必要信息(运行内容以及运行数据)。 然后,工人负责实际运行这些工作。 前提条件 要使用Kue,您需要安装Node.js和npm,当然,还需要安装和配置Redis。 我们假设您在本地主机(127.0.0.1)上安装了Redis,并在默认端口6379上进行侦听,但是您当然可以适当地配置它。 安装 使用npm安装Kue: NPM安装k 然后,您将需要它: var kue = require(’kue’); 创建工作 在创建作业之前,您需要创建一个队列实例: var queue = kue.createQueue(); 还有许多其他选项,例如命名队列和覆盖默认的Redis连接设置。 有关更多详细信息,请查阅文档。 现在让我们通过在新创建的队列上调用create()方法来创建作业。 第一个参数标识作业的类型,第二个参数将任何其他数据作为哈希传递。 然后必须将作业保存到队列中。 这是一个例子: queue.create(’email’,{ 标题:“欢迎使用该网站” ,发送至:“ user@example.com” ,模板:“ welcome-email” })。保存(); […]

第六周回顾-训练营

本周开始于提交作品集分配和演示。 这周标志着我和大部分班级的开始! 领英 Massive Interactive的首席质量保证工程师Abhi Daspatnaik抽出时间来谈论他的角色。 作为负责人,我认为他在每个负责评估规格和技术设计文件质量的人员中都在海外。 我看到他在像Massive Interactive这样的大型团队中扮演角色的重要性。 确保QA处于这一位置很重要,因为他们能够从不同的角度看待正在构建的内容。 MVC MVC或模型,视图,控制器是一种架构模式。 它是最常用的或正在开发的用户界面,它将应用程序分为三个相互链接的部分。 (MVC)通过在酒吧点酒来解释 通过 凯文·科诺年科(Kevin Kononenko) 以一种易于理解的方式解释了这三者之间的关系。 24/09 / 2018–30 / 09/2018 再次,我继续每天阅读一到两章的《 Ikigai》,现在我几乎完成了。 在这一周里,我受亚当·德米雷尔(Adam Demirel)邀请去抱石。 我立即迷上了它,结果一周内我去了五次。 我知道这有点多,但我受不了。 超级有趣,现在我将继续登山和骑自行车。

模型视图控制器的起源

MVC(模型视图控制器)是一种用于在电子设备上实现用户界面的软件模式。 根据其架构师Trygve Reenskaug的说法,“ MVC的创建是为了解决使用户可以从多个角度查看其信息的一般问题的解决方案。” Trygve在施乐Palo Alto研究实验室担任客座科学家时就想到了MVC。 PARC),在1978年夏季至1979年之间。在PARC期间,他专注于支持LRG(学习研究小组),该小组正在开发DynaBook。 DynaBook是对现在称为平板电脑的早期概念。 它的创建者设想了一种通用工具,可以弥合用户和与她相关的信息之间的鸿沟。 早期的概念是考虑到儿童的,因此DynaBook可以用作所有年龄段儿童的学习计算机。 因此,它必须易于使用,并且必须直观。 正如创作者所描述的:“ 用户就是沙皇; LRG所做的一切都是为了支持他。” 在这种背景下,创建了MVC,将其作为一种新型个人计算机的支持软件体系结构。 一台将可用性放在首位而不影响功能的计算机。 这种想法在MVC的原始理论化中显而易见。 正如Trygve所说的那样, “ MVC的基本目的是弥合人类用户的心理模型与计算机中存在的数字模型之间的鸿沟。 理想的MVC解决方案支持用户直接查看和操作域信息的错觉。 如果用户需要在不同的上下文中和/或从不同的角度同时看到相同的模型元素,则该结构很有用。” MVC的第一个实现是由LRG集团以一种称为Smalltalk的语言完成的。 smalltalk是第一种真正的面向对象语言。 如今,MVC已成为桌面GUI,Web应用程序甚至移动应用程序的首选架构模式。 它也已成为Web最受欢迎的Web框架的选择模式。

部署我的第一个iPhone应用程序的经验教训

第三部分 上一次我谈到了如何设置crontab以便每分钟运行某个命令的内容。 细心的读者会看到它正在运行cron_helper.rb 。 由于我不是这种编程人员的新手,所以这可能不是公认的最佳实践,但是它对我有用(暂时),因此,我将向您介绍该特定脚本及其功能。 我的应用程序是一个名为HustleTime的运输时间应用程序(虽然目前尚未面向公众发布,但目前可通过应用程序商店进行“试飞”)。 HustleTime占用MTA的最新交通数据,并将其发送到您的智能手机。 一键式显示,HustleTime显示接下来的两个到达地点最近的车站。 这个应用程序的想法是在一个早晨走到地铁时想出来的,我想知道我是否有时间在当地的酒窖里喝杯咖啡-几个月后,我有了HustleTime,每天使用它。 那么cron_helper.rb如何获得我的运输数据,以及如何在上面的我的小iPhone SE上显示该运输数据? GTFS GTFS或通用运输提要规范是MTA(以及许多其他运输系统)分发其运输数据的方式。 在上一篇文章中,我简短地谈到了我最初是如何通过将GTS数据发送到postgresSQL数据库开始的。 这有一些严重的问题。 主要是postgres并不是特别快,因此事实证明每30秒写入和重写一次运输数据的过程很困难。 我每30秒或每分钟写14,000条记录(MTA系统中在纽约市的工作日中每1/2个小时到达站点的次数)。 PG根本跟不上。 我需要更快的东西。 雷迪斯 输入Redis。 对于许多人来说,这是显而易见的选择。 但是对于刚刚离开训练营的人,我不知道Redis是什么或如何使用它。 Redis本质上是利用系统RAM的键值存储。 它不是默认的持久性,但是您可以根据需要保存状态。 它的主要优点是超快,并且易于设置和使用。 因此,我实际上要做的是以下内容: — ping MTA服务器以获取最新的过境到达 —解析我感兴趣的到达数据(即仅接下来的30分钟) -将旧的redis数据保存到旧数据的变量中(在其中重写任何内容) —在redis中将新的(解析的)数据保存到当前数据 我基本上在任何给定的分钟上都有2组数据-收到请求后,如果新数据不存在或尚未准备就绪,它将要求使用旧数据。 之前我说过Redis在我的系统RAM上运行,所以我需要在本地安装redis和redis-cli。 您可以使用redis-cli monitor来查看您的redis在做什么。 我的显示器看起来像这样: 我基本上要做的是获取运输数据并将其组织为json对象,然后将这些数据推送到redis中。 我通过后端(当我从前端收到api请求时)从Redis检索数据,并通过该数据的JSON.parse(@@redis.get([key_for_data])将该数据发送到前端进行渲染每个单独的到达看起来像这样: {“train”:”[SUBWAY_LINE”, “time”: [UNIX_TIME], “station”: “[MTA_station_code]”, “direction”: “[N/S]”} 我想这篇文章与设置我的第一个应用程序没有多大关系,但是我想值得注意的是,拥有一个有用的应用程序可能会要求您拥有一个正常运行的后端,这样您才能拥有它在前端做尽可能少的工作。 在我的下一篇文章中,我将讨论有关启动和运行该应用程序的更多信息。 关于react-native与xCode的交互方式以及如何调试一些问题的一些知识……