作者:AppCoda,原文链接,原文日期:2016-04-16
译者:Crystal Sun;校对:numbbbbb;定稿:Channe

我之前写过这篇文章 Migrating a parse database to a self-host MongoDB instance,在这次的春季辅导教程中,我们看一下如何将 parse 服务器迁移到 Heroku 或 Amazon Web Service。

对于还不了解 Parse 之死的人来说,这意味着服务器(处理数据、与数据库互动、发送接收请求等待)需要迁移到其他地方了。Parse,后端即服务(BaaS),为开发者提供服务器和数据库的服务。然而,Parse 已在一月份关闭,官方建议,在 2017 年 1 月 28 日彻底停止服务之前,请迁移 Parse 应用。Parse 官方建议你先迁移数据库,然后在迁移服务器。本教程假定你已经完成了数据库的迁移,正如我们在上篇教程第一部分中所做的。

幸运的是,parse-server(GitHub 项目,由 Facebook 开源,『伟大的』 Parse 统治者)可以部署在大部分的云服务上。在本节教程里,我们会讲述如何将 parse-server 部署到Salesforce 旗下知名的云服务供应商 Heroku。在本篇文章的最后部分,我们会演示如何部署到 Amazon Web Services(AWS)上,世界上很多知名的 App 都在使用 AWS 的服务。

准备开始

首先到 Heroku.com 网站注册一个帐号。为了演示 demo,我选择了免费方案。你根据自己的需要,选择合适的方案,比如付费方案。你可以在这里看到所有的付费方案。

部署到 Heroku 有两种方法可供选择。第一种是点击 Deploy to Heroku 按钮,然后出现一步接一步的提示流程,因为 Parse 已经在 Heroku 的服务器上设置过 parse-server 了,对非 JavaScript 程序员来说,这可能是最简单的方法了。如果你熟悉 git 和命令行,请使用克隆应用然后用命令行完成。话虽如此,但是你不能一辈子都避免使用命令行。不管你选择那种方式,都会涉及到命令行的。

方法 1:使用 Heroku 按钮

点击上面的按钮,创建一个新的 heroku 应用,你会看到类似下方图片的界面:

设置向导出现,让你输入应用名称(全部小写且不允许有空格)。

接下来,选择 runtime 选项。如果你住在美国,选择 United States(美国),其他地方,选择 Europe(欧洲)。runtime 选项,就是你希望你的应用部署在哪个地方。考虑到性能和速度,最好将应用服务器部署在离你较近的地方。

接下来更新配置,填写 Parse 账户里对应的密钥(或者生成新的密钥,如果你不是迁移现存应用的话,这点以后再说)。安装路径为 /parse

当你填完所有的字段后,点击 deploy 按钮,暂时先空着 MongoLab(也就做 mLab)开发。


可能需要你输入你的信用卡。

方法 2:克隆 Heroku 应用

parse-server 是开源项目,可以在 GitHub 上下载。如果你选择的是命令行而不是点击 Heroku 按钮,那么继续下方的操作。开始前,先打开终端(Terminal),使用下方的命令来克隆应用:

bash
cd ~
cd Desktop
 
git clone https://github.com/ParsePlatform/parse-server-example.git
git add .
git init
git commit -m "Initial Commit"


现在,你已经成功地将 parse-server 克隆到桌面了。

修改数据库的 URI

不管你在上面选择了哪个方式,现在你的应用在一定程度上已经设置过了。如果你使用是方法 1,你需要在你电脑里复制一份本地代码副本,首先用下列命令行(也会将 App 克隆到电脑桌面)。

注意:下方的选项适用于选择了方法 1 的人

bash
$ heroku login 
 
$ cd ~/Desktop
$ heroku git:clone -a your-app-name
$ cd your-app-name
 
$ git add .
$ git commit -am "make it better"
$ git push heroku master

登录后,需要输入认证(之后会详细说明,不过现在只需要输入 Heroku 帐号的邮箱和密码,密码不会出现在屏幕上)。

现在,打开你最喜欢的文本编辑器(我比较喜欢 Sublime Text),打开新克隆的库(repository)(对于新手来说,你可以直接将整个文件夹拖到 sublime text 图标上,然后 sublime text 会自动打开文件,或者使用顶部菜单的 File -> Open)。

现在,我们需要打开 index.js 文件,修改 API 变量。注意第 14-23 行。

从第 14 行开始,我们需要修改 databaseURL 参数。使用在本教程第一部分生成的路径来替换参数。我会使用下面的 url,不过你必须用你自己的 url 来替换。

mongodb://admin:mypassword@ds017678.mlab.com:17678/appcoda-test

接下来,我们需要填写 appIdmasterKey 参数。如果你是在迁移一个已经存在的应用,到 parse.com 上找到对应的数据。如果这是你第一次使用 parse-server 创建一个新工程,你可以生成随机的字母数字密钥。

在 parse.com 网站上登录你的 Parse 帐号,找到 Settings(设置),选择 Security & Keys。复制粘贴你的 Application ID(复制这个应用,不要复制成其他应用的)和 Master Key。下面的图片可供你参考(我的密钥出于安全考虑遮挡)。

注意:如果你选的是方法 1,那已经设置了你的密钥,你可以直接跳过这一步。即使如此,我还是建议你看一下,这样你能对 parse-server 的工作机制有更深入的理解。

index.js 文件里替换上你刚刚复制来的新密钥,你也可以添加 clientKey 作为一个参数,从 Parse 中获取。

最后,记住保存你的操作,快捷键 Command+S(Mac 电脑上)。

如果你不是迁移应用,那么使用随机生成器(例如 random.org 或其他类似的东西)来生成字母数字密钥。

接下来,部署 Heroku。

将 Parse 服务器部署到 Heroku

首先在电脑上安装 Heroku 工具条,从链接中可以找到官方安装指南。安装完成后,在终端(Terminal)中输入下列命令行:

bash
heroku login

接下来输入登录 Heroku 信息,注意当你输入密码的时候,密码不会出现在屏幕上。

如果你选择的是方法 1,就没有必要用下面的命令行创建一个 Heroku 应用了。如果你选择的是方法 2,确保输入下列命令行来创建一个 Heroku 应用。

bash
heroku create

Heroku 会给你创建一个应用,现在提交修改内容,代码如下:

bash
git add .
git init
git commit -m "Updated api config"
git push heroku master

现在,你已经成功部署了 Heroku!如果你遇到任何错误,请在下方的评论栏中留言,我将尽力帮助你。

设置 Heroku 的环境变量

接下来,我们需要设置 Heroku 的环境变量,回到终端(Terminal),输入下列命令(使用你的 MongoDB 实例中的 URI,我们之前介绍过)。

bash
heroku config:set DATABASE_URI=mongodb://admin:mypassword@ds017678.mlab.com:17678/appcoda-test

回到 Heroku 网页上,点击你的应用,在 Settings tab 页下,点击 reveal config variables

现在你应该可以看到 Heroku 的 config Variables 里有了 database URI。

恭喜你!你的 parse-server 已经成功地部署到了 Heroku。唯一的问题是:还没有连接到你的 iOS 应用上

定位 Parse 服务器的 URL

为了能够将你的应用连接到新的 parse-server,首先要从 Heroku 应用设置里定位托管地址(hosting url)。

回到 index.js ,找到第 27 行,注意找 moutPath 变量是 /parse

这个变量表示 parse 在 Heroku 服务器上的地址。目前来说,地址是 /parse。所以,可以在 yourapp.herokuapp.com/parse(改成你自己的域名) 中访问 parse-server。

设置 iOS 应用

现在,我们已经正确地配置和部署了服务器,是时候来设置 iOS 应用设置选项了,让 iOS 应用连接到新的 parse 服务器上。

在 Xcode 里,打开应用,选择 appdelegate.swift 文件,删除你以前的 app key 和 client key(然后写上你自己的密钥和服务器的 url)。

把下面这段代码删掉:

Parse.setApplicationId(“xxxxxxxxxxxxxxxxxxxxxxxx”,clientKey: “xxxxxxxxxxxxxxxxxxxxxxxx”)

替换成:

let config = ParseClientConfiguration(block: {
   (ParseMutableClientConfiguration) -> Void in
   ParseMutableClientConfiguration.applicationId = "xxxxxxxxxxxxxxxxxxxxxxxx";
   ParseMutableClientConfiguration.clientKey = "xxxxxxxxxxxxxxxxxxxxxxxx";
   ParseMutableClientConfiguration.server = "xxxxxxxxxxxxxxxxxxxxxxxx.com/parse";
});
 
Parse.initializeWithConfiguration(config);

完成操作后,点击 Run 按钮,测试一下应用。正常情况下应用会和迁移以前一样运行。如果你使用云代码,可能需要修改一下代码,来适应新的 parse 服务器环境。我们会在下一个教程中涉及这个话题。另外,在下一个教程里,我们还会介绍在服务器里托管 Parse 的 dashboard。不过现在而言,你可以继续使用 parse.com 的 dashboard,直到官方彻底关闭服务,也就是 2017 年的一月。

恭喜!你已经成功地在 Heroku 上部署了 parse-server。

将 Parse 服务器部署到 AWS

注意:如果你已经将 parse-server 部署到了 Heroku 上,那么就不需要再部署到 AWS 上了,毕竟你的服务器只能使用一个云服务。这部分主要是用来参考。如果你不想使用 Heroku,想使用 AWS,可以继续阅读下面的章节。我会假设你已经阅读过上面 Heroku 部分的教程内容,如果出现同样的设置内容,我不会赘述。

Amazon Web Services(AWS)是全球知名的云服务提供商,为科技界许多知名的大型公司提供云服务。实际上,很多大型科技公司都在使用 AWS 的服务,例如苹果公司的 iCloud,Hulu,AirBnb,Lyft,Adobe,Slack (这些都是国外知名的科技公司)等等,这些只是使用 AWS 云存储服务的众多公司中一小部分。

那么,为什么我先介绍 Heroku 呢?不同于 AWS 的是,Heroku 更容易设置。对于大部分的设置,你可以直接进行无需输入账单信息。AWS 则不一样,设置方法比较复杂。为了演示如何部署到 AWS 上,我们将使用另外一个部署按钮和设置向导,来让所有的工作简单流畅。

再次强调一下,如果你已经将应用部署到了 Heroku,而且对 Heroku 的服务比较满意,你可以直接跳过这部分了。然而,如果你对如何部署到 AWS 上感兴趣,那么让我们开始吧!

第一件事,到 AWS 上注册一个 AWS 帐号,需要提供你的付款信息,这样才能使用免费方案。

完成后,点击下方的按钮,创建一个新的 AWS 应用,AWS 提供一组云服务工具,每个工具都有自己的独特的功能,在本节教程中,我们使用 Elastic Beanstalk(和 Elastic Cloud Compute Engine 或简称 EC2 紧密相关)。

什么是 Elastic Beanstalk ?
根据 Amazon 上的简介,Elastic Beanstalk 是一个易于使用的,用于部署和扩展网页应用和服务,适用的语言有 Java、.NET、PHP、Node.js、Python、Ruby、Go、Docker,例如 Apache、Nginx、Passenger 和 IIS。

是不是很炫酷?或许吧,总而言之,我们将使用这个服务来设置和运行我们的 parse 服务器。如果你想了解更多有关 Elastic Beanstalk 的信息,请参考官方网页。

点击按钮后,会出现一个增加应用名称的界面,如下图。

下一步,确保你的设置如下图,然后继续。

在接下来的界面里使用正确的密钥上传 parse 设置,parse 装在 /parse 下。

现在,点击 upload and deploy 按钮,完成最后一步。不出意外应用已经正确设置在 AWS 上了。

当你设置 iOS 应用时,确保你已经定位了 AWS 的 URL,可以在 elastic beanstalk 里找到(如下图)。

恭喜!你成功将 parse 服务器部署到了 AWS 上!剩下需要做的事情就是用适当的密钥和新的服务器 url 来设置 iOS 应用(后缀 /parse)。

结束

在本节教程中,我们深入了解了部署 parse 服务器的过程,估计现在你对部署过程已经掌握的比较牢固了。

注意,有些细节本文没有讨论。如果你使用的是云代码,你可能需要做一些改动才能正常运行。另外,你可能还需要一个 Parse dashboard 的替代品。幸运的是,Parse 团队已经将 dashboard 开源了,并提供了详尽的云代码更新指南。在之后的教程中,我们会详细讨论这些内容。不过现在,你首先要将应用部署到 Heroku 或 AWS 上!

你觉得本教程怎么样?请留下评论,分享你的想法。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。

如何将 Parse 服务器迁移到 Heroku 或 AWS的更多相关文章

  1. 将AWS DynamoDB表中的数据加载到iOS上的UITableView

    我的iOS应用程序中使用Swift编写的一个屏幕是UITableView.在这个UITableView中,我想从AWSDynamoDB表中加载名为Books的数据.目前,这是我在故事板上的原型单元格:在表格中我有3个属性:“名称”,“价格”和“ISBN”.我想要的是扫描“书籍”表,并过滤结果,因此结果的“ISBN”属性将包含数字“9”.在我筛选结果后,我想将它们应用到UITableView,因此“

  2. 如何使用AWS iOS SDK从设备上传图像并设置为公开

    由于看起来我们只限于桶数,我试图找出如何完成以下操作:>我有一个iOS应用,用户可以上传一个个人资料图片.>个人资料可以被任何人查看(我想要公开).>理想情况下,我可以上传到一个桶(例如:myprofilepics.s3.amazonaws.com)>理想情况下,每个用户都可以上传到自己的子文件夹(例如:myprofilepics.s3.amazonaws.com/images/userXXX/>

  3. 如何将我的ios应用程序中的图像上传到存储在aws s3上的存储桶中,并在Swift中完成所有这些操作?

    v=WZ54fH8AFUk(不幸的是它在目标C在这里,我会很感激,如果你能帮助我一个迅捷版……解决方法请确保您有一个桥接标头,您可以在其中导入相应的AWS标头.GitHub上有一个名为here的例子.这样做应该使S3方法可用.-Rohan

  4. 如何将 Parse 服务器迁移到 Heroku 或 AWS

    然而,Parse已在一月份关闭,官方建议,在2017年1月28日彻底停止服务之前,请迁移Parse应用。在本节教程里,我们会讲述如何将parse-server部署到Salesforce旗下知名的云服务供应商Heroku。部署到Heroku有两种方法可供选择。接下来,部署Heroku。将Parse服务器部署到Heroku首先在电脑上安装Heroku工具条,从链接中可以找到官方安装指南。你的parse-server已经成功地部署到了Heroku。这个变量表示parse在Heroku服务器上的地址。

  5. Hello,服务端 Swift

    我的好奇心终于无法克制,是时候尝试一下服务端Swift了!我决定使用Heroku的原因是我们的后端团队在使用它,它对于前端来说非常友好。安装要继续本教程,首先,你需要一个Heroku账号,并安装好SwiftDevelopmentSnapshot。开始我们的目标是创建一个简单的Swift服务器并运行在Heroku上。Heorku提供了一些标准的buildpacks,但完全没有针对Swift的buildpacks。通过procfile,我们告诉Heroku去运行SwiftServerIO可执行文件。可以说,服

  6. 令世人惊叹的服务器端 Swift!

    接下来我们将会聊一聊这些框架的优缺点,并且介绍如何入门服务器端Swift开发。(其中的几个框架仅支持Swift3!我打算以一个旁观者的角度来讨论服务端Swift开发,比较各个框架以及服务端Swift开发所处的位置。应用程序,接着通过现场编码演示如何部署服务端Swift开发环境,编写一个“Hello,World!”随着12月份Swift正式开源,开发者已经开始尝试服务端开发,使用Swift构建web应用程序。不难看出服务端Swift开发极具潜力。他们的目标是将Swift做的和Rails一样。

  7. 教你在heroku云平台上部署Node.js应用

    heroku是构建在AWS之上的一个PaaS云平台,现在支持Ruby, Node.js, Python, Java, 和 PHP,代码的部署是通过git进行,编译和运行都是自动的。

  8. React内存使用情况部署到Heroku

    我最近完成了一个MERN堆栈web应用程序,并试图将其部署到Heroku上。它看起来像是已部署的,但当我尝试登录或创建用户时,它显示404未找到/grapql。当运行heroku日志-tails时,它在发布后表示,应用程序由于内存使用超过配额而崩溃。所以我在本地运行它,并使用DevTools查看内存使用情况。我目前正在尝试重构搜索到的内容,并使用react.llazy只显示用户的观点。

  9. windows – Heroku:’https://git.heroku.com’的用户名:git

    我正在尝试检查heroku上的git远程:这个错误在heroku文档中引用,在上面的屏幕截图中显示为https://devcenter.heroku.com/articles/git,但我不知道接下来要做什么来解决这个问题.这对我有用.$herokuauth:token出现提示时,将结果用作密码.

  10. ubuntu – 如何减少AWS EBS根卷大小?

    扩展EC2实例很容易就像一口气(例如,创建AMI,从中启动实例然后更改存储大小).但减少它变得更加困难.我想减少AmazonWebServices(AWS)EC2实例弹性块存储(EBS)根卷大小.网上有一对旧的高级程序.我发现的更详细的版本是关于StackOverflow问题的一年回答:howtocanireducemyebsvolumecapacity,步骤具有相当高的水平:Createanew

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部