iOS Firebase Flashlight/ElasticSearch 使用 Node.JS 设置 Heroku

iOS Firebase Flashlight/ElasticSearch Heroku Setup using Node.JS

我正在使用 Firebase 后端在 Swift 中构建一个 iOS 应用程序。我的应用程序需要高级搜索选项。有人告诉我应该通过这个 github link https://github.com/firebase/flashlight

使用 Flashlight/ElasticSearch

假设我的应用名称是 SneakerSearch,我的

Firebase Project_ID is- sneakersearch-az12 
Firebase Web_API_Key is- abc123XYZ000...
Firebase App_Url is- gs://sneakersearch-az12.appspot.com

由于我是 Heroku 和 Node.js 的新手,因此我需要一些有关设置步骤的建议。我以前从未学过,但我已经安装了 Heroku 工具带并且 'sudo gem heroku install' 完成了。

我列出了 git 中心 directions/steps 和我为每个方向采取的步骤。我需要方向方面的帮助:1、4、5、6、9、10、12 和 15。

1.Install and run ElasticSearch or add Bonsai service via Heroku

1。我在 Heroku 注册了一个帐户。

1.-问题:我是否需要在设置 Heroku 帐户后创建我的应用程序的名称并部署它,还是应该等到第 9 步?

2.git clone https://github.com/firebase/flashlight

2.I 将以上内容克隆到我的 iOS 应用程序的项目文件夹中

3.npm install

3.At提示我先我运行"npm init"然后我运行"npm install"

4. edit config.js (see comments at the top, you must set FB_URL and FB_SERVICEACCOUNT at a minimum)

4A.-问题:什么是 "FB_SERVICEACCOUNT"?我正在使用 Firebase 3,但在控制台的服务帐户上找不到任何内容。除了我已经创建的 Firebase swift 项目之外,这是我必须使用 node.js 为我的项目设置的另一个 Firebase 帐户吗?

4B.-问题:我在哪里 "edit config.js" 并设置我的 FB_URL 和 FB_SERVICEACCOUNT?这应该在我的 package.json 文件中吗?

5.node app.js (run the app)

5.-问题:在终端 I 运行 "node app.js" 中得到 "throw err;^"。为什么会出现此错误?

6.curl -X POST http://localhost:9200/firebase

6.-问题:这是做什么用的?

7.cd flashlight

7.switched 到手电筒目录

8.heroku login

8.logged 到 Heroku

9.heroku create (add heroku to project)

9A-问题:当我第一次在 Heroku 创建帐户时,我是否应该使用我的应用程序名称创建一个新应用程序并使用它列出的 git 说明进行部署?如果我一开始不应该这样做,运行宁 "heroku create" 会为我管理这个过程吗?

9B-问题:我是 运行 "heroku create" 还是 运行 "heroku create -app's name- here"?

10.heroku addons:add bonsai (install bonsai)

10.-问题:我是否需要在 Bonasi.io 创建一个帐户并在此步骤之前安装它,或者这会为我设置一个盆景帐户吗?没用过盆景

11.heroku config (check bonsai instance info and copy your new BONSAI_URL - you will need it later)

11.I 猜猜这个问题取决于第 10 步。

12.heroku config:set FB_NAME=<instance> FB_TOKEN="<token>" (declare environment variables)

12.-问题:什么是 Firebase 令牌?这是我的 Web_API_Key、App_URL 还是 Project_ID?我在我的 firebase 控制台中找不到任何特定于 "token" 的内容。我正在使用 Firebase 3。

13.git add config.js (update)
git commit -m "configure bonsai"

13。提交消息

14.git push heroku master (deploy to heroku)

14。推送到 master

15.heroku ps:scale worker=1 (start dyno worker)

15.-问题:这是做什么用的?

这是一个由 2 部分组成的答案,第 1 部分按照 Github 的说明并在第 19 步结束。第 2 部分扩展了第 1 部分无法包含的更多信息,并将于详细步骤 19。我必须将它添加到另一个问题并 link 它到此。

下面是按顺序列出的 Github 个步骤。仅供参考,我保持原始步骤与原始 Github author 列出它们的方式一致,但在下面我放了一堆 sub-steps,每个步骤下面都有详细的解释和说明。

假设您已经创建了一个 Firebase 项目并获得了 GoogleService-Info.plist 文件

打开您的 GoogleService-Info.plist 文件。 Github directions 中的以下 variablesGoogleService-Info.plist keys

相关
-FB_NAME is the same thing as your PROJECT_ID
-FB_URL is the same thing as your DATABASE_URL
-FB_TOKEN is the same thing as your API_KEY

So 

-if your PROJECT_ID is "sneakersearch-az12" then your FB_NAME is "sneakersearch-az12"
-if your DATABASE_URL is "https://sneakersearch-az12.firebaseio.com" then your FB_URL is "https://sneakersearch-az12.firebaseio.com"
-if your API_KEY is "0012abc789xyz00019" then your FB_TOKEN is "0012abc789xyz00019"

//These are not inside your GoogleService-Info.plist but you will encounter them later
-FB_SERVICEACCOUNT pertains to downloading a json file from the your project's Firebase console. You will need to go to the page SERVICE ACCOUNTS it's exp in step 3B
-clientEmail is the same thing as your Firebase Service Account. You get this from either the Unknown file or on your SERVICE ACCOUNTS page via the FB Console and it's exp in step 3D and 3B
-privateKey is the same thing as private_key but this key is NOT your API_KEY, it is a key that is inside the Unknown file from the SERVICE ACCOUNTS page. It looks something like: "-----BEGIN PRIVATE KEY-----\nCYchgacopuyvpc017246t124087t6hpUTYVPUSVDPUCHVEpcl889ljbsiugr4ygrphvuygpuy...mutli-lines...\n-----END PRIVATE KEY-----\n". Also exp in step 3B

在每个 Github 步骤下面我都有评论和说明。在我使用以下值的说明中,您应该改用 project's values。因此,对于步骤示例,我将使用这些 keysvalues:

//GoogleService-Info.plist
PROJECT_ID---aka--FB_NAME:  sneakersearch-az12
DATABASE_URL-aka--FB_URL:   https://sneakersearch-az12.firebaseio.com
API_KEY------aka--FB_TOKEN: 0012abc789xyz00019
//FB Service Account info
Firebase service account--aka--clientEmail: firebase-admin-81772@sneakersearch-az12.iam.gserviceaccount.com //this is auto generated for you once you've created your firebase project
//Heroku and Bonsai info
Heroku Instance Name--aka--Heroku App Name: sneakersearchinstanceAtoZ
BONASI_URL --aka--Bonsai Cluster URL:  https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net

Swift 数据模型:(这将匹配您在第 19 步中放入映射对象的内容)

class Sneakers: NSObject{
    var sneakercondition: String?
    var sneakername: String?
 }

VC 带有我将数据发送到 Firebase 的文件路径,searchSnkPath 是一个单独的文件路径,Bonsai 将 运行 在以下位置进行搜索:

@IBOutlet weak var conditionTextField: UITextField!
@IBOutlet weak var nameTextField: UITextField!

var dbRef: FIRDatabaseReference!
let userID = FIRAuth.auth()?.currentUser?.uid

override func viewDidLoad() {
    super.viewDidLoad()
    self.dbRef = FIRDatabase.database().reference()
 }

@IBAction func postDataButton(){

    var dict = [String:AnyObject]()
    dict.updateValue(conditionTextField.text!, forKey: "sneakercondition")
    dict.updateValue(nameTextField.text!, forKey: "sneakername")

    let idPath = self.dbRef.child("users").child(userID!).child("sneakersPath").childByAutoId()

        //searches will run on this file path
    let searchSnkPath = self.dbRef.child("searchSnkPath").childByAutoId()

    idPath.updateChildValues(dict){
       (err, ref) in
       searchSnkPath.updateChildValues(dict)
    }
  }
}

FBDatabase 中,我要搜索的数据存储在 root/searchSnkPath/autoID 的路径中,它有 2 个名为 sneakerconditionsneakernamekeys 代表数据。我要从中提取搜索结果的路径是 root/searchSnkPath

root
  |
  @-users
  |   |
  |   @-userID
  |      |
  |      @-sneakersPath
  |            |
  |            @-autoID
  |                |-sneakercondition
  |                |-sneakername
  @searchSnkPath
      |
      @-autoID
          |-sneakercondition
          |-sneakername

如果我想搜索 searchSnkPath 并查询那些 2 keys 然后在 config.js 文件中我会找到 exports.paths 并且里面有我会将信息设置为在

上搜索
exports.paths = [
   {          
      path : "https://sneakersearch-az12.firebaseio.com/searchSnkPath", //exp in Step 4
      index: "firebase", //exp in Step 17
      type : "sneakers", //exp in Step 19
      fields: ['sneakercondition', 'sneakername'] //these are the specific keys to search on (exp in Step 4)
    }
]

第 4 步涵盖所有这些

重要 在你 运行 git clone https://github.com/firebase/flashlight (步骤 2A)之后你需要 cd 进入 flashlight 文件夹(步骤2B) 因为从那一点开始的所有步骤都发生在 flashlight 文件夹中,并且 NOT 您的主要 Xcode 项目文件夹。 在您的 Xcode 项目文件夹中没有任何内容会起作用,因为它没有 package.json 文件

第 1 部分 - Github 步骤:

1•Install and run ElasticSearch or add Bonsai service via Heroku

1.comments:

-Bonsai 将在第 10 步添加

-在继续之前,您确实需要按顺序执行以下步骤 1A-1E

1.directions:

1A.https://nodejs.org/en/download/

下载并安装 Node.js

1B.https://devcenter.heroku.com/articles/heroku-cli 下载并安装 Heroku Toolbelt(已重命名为 Heroku CLI)。仅供参考,我使用的是 OS X Installer 而不是 OS X Homebrew。

1C. 下载并安装 Heroku Toolbelt/CLI 后登录 Heroku.com 并创建一个帐户

1D. 创建 Heroku 帐户后无需创建新的 Heroku App 您将在第 9 步中使用命令行执行此操作。很简单

1E. 打开终端和 运行: node -v 找出当前 node version 你的 运行ning (for例如你得到 v6.9.1)。在步骤 2D 中,您必须确保那里的版本与此输出匹配。

2•git clone https://github.com/firebase/flashlight

2.comments:

-假设 Xcode 项目位于桌面上名为 sneakerSearchFolder

的文件夹中

-在终端内,您 cd 到 sneakerSearchFolder 文件夹 - 即 运行:cd Desktop/sneakerSearchFolder

-进入 sneakerSearchFolder 后,您 clone the github repo 位于 https://github.com/firebase/flashlight

-重要 然后你 cdflashlight 文件夹即 运行: cd flashlight

-根据 https://devcenter.heroku.com/articles/deploying-nodejs

,您将需要 node version 您的 运行ning

-运行: node -v 稍后在 flashlight 文件夹(即 v6.9.1)中获取 node version 是 运行ning当你制作 Heroku instance 时,你将需要根据上面的 devcenter.heroku link

-现在你在 flashlight 文件夹中,如果 node version 你只是 运行 与步骤 1E 中的版本不匹配,你将需要更新里面的版本使它们匹配的手电筒文件夹。 Upgrading Node.js to latest version 如果两个版本都匹配那么你就不用担心这个

-假设您的节点版本匹配,打开 flashlight 文件夹中的 package.json 文件并添加一个 "engines" 对象,键的值为您的 node version目前正在使用

"engines": {
    "node": "node_version_num_you_got_back_from_running_node -v"
  }

2.directions:

2A. 在终端中导航到您的 Xcode 项目所在的文件夹

2B. 运行: git clone https://github.com/firebase/flashlight

2C. 运行: cd flashlight

2D. 运行: node -v

2E. 打开 flashlight 文件夹,然后打开 package.json。将以下内容添加到文件中。

"engines": {
    "node": "whatever_was_returned_from_Step_2D"
  }

2E-示例。 仅供参考,这是一个示例。打开 package.json 并在 "dependencies" closing brace 之后添加它。请务必在右大括号后添加一个逗号。并且不要在版本号前添加"v"。保存文件。

"dependencies": {
    "JQDeferred": "~1.9.1",
    "colors": "~0.6.2",
    "elasticsearch": "^11.0.1",
    "firebase": "^3.5.2"
  },
"engines": {
    "node": "6.9.1"
  }

3•npm install

从现在开始,您的 flashlight 文件夹而不是主项目的文件夹非常重要一切正常,否则你会得到错误

3.comments:

-您应该仍在 flashlight 文件夹中

-登录 Firebase,在 FB 项目的控制台中,转到 Project's SettingsOverview 旁边的小圆形图标),在项目设置中选择 SERVICE ACCOUNTS,转到 Firebase Admin SDK 部分。这里有两件事你必须做。 1. 找到并复制你的 Firebase service account,它看起来像 firebase-admin-81772@sneakersearch-az12.iam.gserviceaccount.com 和 2. 在页面底部你必须单击 Generate New Private Key 按钮,它会下载一个 Unknown file,您需要将其重命名为 service-account.json。如果它将文件命名为 Unknown 以外的名称,只需将其重命名为 service-account.json。重命名文件后将其拖到 flashlight 文件夹中,因为步骤 4B FB_SERVICEACCOUNT 需要从那里访问此文件。确保将文件放入 FLASHLIGHT FOLDER!

-github 步骤中未列出,但这是必需的。您必须将 Firebase Server SDK Credentials 添加到您的项目

-您需要在您的 flashlight 文件夹中才能执行 运行 $npm install firebase-admin --save 命令,否则您会收到错误消息,因为它会查找 packae.json文件。该文件已经在您的 flashlight 文件夹中,而不是在您的主 Xcode 项目文件夹中

-按照 https://firebase.google.com/docs/server/setup 的指示,在 Initialize the SDK 部分内。您将需要 Unknown 文件(现在应该重命名为 service-account.json)中的 2 个值来初始化它。这些值位于第 5-private_key 和第 6-clientEmail 行。仅供参考 clientEmailFirebase service account 是同一件事

-这就是你initializing里面的SDK:

var admin = require("firebase-admin"); //this imports the npm firebase-admin module you just installed

admin.initializeApp({
      credential: admin.credential.cert({
        projectId: "<PROJECT_ID>", //projectId: is the PROJECT_ID from your GoogleService-Info.plist file
        clientEmail: "foo@<PROJECT_ID>.iam.gserviceaccount.com", //clientEmail: is on  line 6 in the Unknown file which is also your "Firebase service account" info
        privateKey: "-----BEGIN PRIVATE KEY-----\n<KEY>\n-----END PRIVATE KEY-----\n" //privateKey: is NOT your API_KEY/FB_TOKEN. Inside the Unknown file on line 5 there is a very long multiline "private_key" key. It looks something like "-----BEGIN PRIVATE KEY-----\nCYchgacopuyvpc017tEpcl889ljbsiugr4ygrphvuygpuy...mutli-lines...\n-----END PRIVATE KEY-----\n". You need to copy and paste it from there to here. Be sure to include the "-----BEGIN PRIVATE KEY-----\n and \n-----END PRIVATE KEY-----\n
      }),
      databaseURL: "https://<DATABASE_NAME>.firebaseio.com" //databaseURL: is the DATABASE_URL from your GoogleService-Info.plist file
    });

-仅供参考,在 Initialize the SDK 部分中,您还可以选择使用顶部显示 path/to/serviceAccountKey.json 的部分,并且您可以提供指向重命名的未知文件的路径。我选择底部的 inline 部分,因为它更容易。如果您按照这些步骤操作,则无需担心。

-flashlight文件夹里面有一个app.js文件,把上面的代码复制粘贴到文件的最前面

-返回命令行中的终端运行:npm install

-如果一切正常,您应该得到的唯一警告是 No repository fieldNo license field

3.directions:

3A。确保你在 flashlight 文件夹内 运行: pwd

3B. 登录到您的 Firebase ConsoleSERVICE ACCOUNTS 页面并单击 Generate New Private Key 按钮下载 Unknown文件。

3C.Unknown 文件重命名为 service-account.json 并将文件放入 flashlight 文件夹中

3D.service-account.json 文件中复制名为 client_emailkey 或者您可以复制您的 Firebase SERVICE ACCOUNTS

3E. 内部终端 运行: npm install firebase-admin --save

3F. 复制 Initialize the SDK 部分中的内容并使用这些值初始化字段:

var admin = require("firebase-admin");

admin.initializeApp({
  credential: admin.credential.cert({
    projectId: "sneakersearch-az12", //use your PROJECT_ID
    clientEmail: "firebase-admin-81772@sneakersearch-az12.iam.gserviceaccount.com", //clientEmail: is on  line 6 in the Unknown file
    privateKey: "-----BEGIN PRIVATE KEY-----\nCYchgacopuyvpc017tEpcl889ljbsiugr4ygrphvuygpuy...mutli-lines...\n-----END PRIVATE KEY-----\n" //privateKey: is on line 5 in the Unknown file
  }),
  databaseURL: "https://sneakersearch-az12.firebaseio.com" //use your DATABASE_URL
});

3G.flashlight文件夹内,打开app.js文件,paste/save上面的代码里面有正确的值

3H. 运行: npm install

4•edit config.js (see comments at the top, you must set FB_URL and FB_SERVICEACCOUNT at a minimum)

4.comments:

-在您的 flashlight 文件夹中有一个名为 config.example.js 的文件,打开它

-在这个 config.example.js 文件中,您可以找到 FB_URLFB_SERVICEACCOUNT 变量(它们列在第 13 行和第 23 行)

-你需要把exports.FB_URL = process.env.FB_URL || 'https://<YOUR APP>.firebaseio.com';改成exports.FB_URL = process.env.FB_URL || 'whatever_your_DATABASE_URL_is';(一定要把whatever_your_DATABASE_URL_is放在单引号或者双引号里面)

-第 23 行 exports.FB_SERVICEACCOUNT = process.env.FB_ACC || 'service-account.json'; 用于从步骤 3C 访问 service-account.json file(无需在此处添加或更改任何内容,因为它将自行访问)

-您现在必须设置您的数据所在的路径(如 searchPath 用于将数据发送到上面 ViewController 内的 FB,索引(第 17 步),以及您要在第 64,65 和 66 行监控的类型(类似于您的数据模型)

exports.paths = [
  {
    path : "users",//line 64
    index: "firebase",//line 65
    type : "user"//line 66
  },

-path 是您的 data 位于内部 FB 的位置。这是您要从中提取搜索结果的地方,即 <DATABASE_URL>/searchSnkPath

-index 第 17 步中的 exp

-type 步骤 19 中的 exp

-FYI 第 69-79 行将设置您想要监视的另一条路径。如果需要,您可以删除或注释掉这些内容。您还可以创建更多路径来监视,即如果您有路径 <DATABASE_URL>/searchClothingPath,那么您也可以在该路径上设置搜索。如果需要,您还可以添加更多路径,即:

exports.paths = [
    {
      path : "https://sneakersearch-az12.firebaseio.com/searchSnkPath"
      index: "firebase",
      type : "sneakers"
    },
    {
      path : "<DATABASE_URL>/searchClothingPath"
      index: "firebase",
      type : "clothingDataModel",
      fields: ['jeans','shirts']//completely optional to use
    },
    {
      path : "<DATABASE_URL>/searchHatsPath"
      index: "firebase",
      type : "hatDataModel",
    },
    //etc...

-仅供参考 Fields 是将在 ES 中编制索引的 keys。这是一个可选的东西来添加。如果您有 10 个 keys 并且只希望其中 2 个 indexed 那么您可以添加这个。这意味着在 10 个键中只有 2 个 keys 是可搜索的。您还可以使用 config.js 文件中的 parse 函数 来做同样的事情

-之后 save/close 将 config.example.js 重命名为 config.js

4.directions:

4A. 打开 config.example.js 文件并在第 13 行更改exports.FB_URL = process.env.FB_URL || 'https://<YOUR APP>.firebaseio.com';exports.FB_URL = process.env.FB_URL || 'https://sneakersearch-az12.firebaseio.com';

4B. 第 23 行用于访问 service-account.json 文件(只要您在步骤 3C 中重命名了 Unknown file 即可继续)

4C. 第 64、65、66 行是我要监视的内容,在第 67 行我为两个 Firebase Database Keys 添加了 fields key我想继续搜索,虽然没有必要

exports.paths = [
  {
    path : "https://sneakersearch-az12.firebaseio.com/searchSnkPath",//line 64
    index: "firebase",//line 65
    type : "sneakers",//line 66
    fields: ['sneakercondition', 'sneakername']//line 67
  },

4D. Save/close config.example.js 文件。现在重命名文件 config.js.

5•node app.js (run the app)

5.comments:

-你不会 运行 这个命令直到最后所以现在跳过它但有些事情你应该知道。 运行 node app.js 运行 在您的本地计算机上安装您的 Heroku 应用程序。它会在本地查找您没有的 ElasticSearch,因此您会遇到连接错误。如果您想在本地 运行 它,那么您将必须 运行 步骤 12B 中的 export BONSAI_URL="<your_bonsai_url>" 代码-可选,这是解决本地连接错误所必需的。如果您的应用程序下降 asleep/crashes(exp 接近尾声),您将不得不再次 运行 export BONSAI_URL="<your_bonsai_url>" 命令。除此之外,Heroku 将在您向其推送代码时自动 运行 应用程序。

-到目前为止,您需要打开 app.js 文件并根据 https://docs.bonsai.io/docs/nodejs 添加一些代码。您应该在 var elasticsearch = require('elasticsearch') 声明之后的任何位置添加代码。

/*
this code is already inside the app.js file. You should add the code anywhere below it

var elasticsearch = require('elasticsearch'),
  conf = require('./config'),
  fbutil = require('./lib/fbutil'),
  PathMonitor = require('./lib/PathMonitor'),
  SearchQueue = require('./lib/SearchQueue');
*/

//You need to add
var bonsai_url = process.env.BONSAI_URL;
var client = new elasticsearch.Client({
                         host: bonsai_url,
                         log: 'trace' 
                     });
    // Test the connection...
client.ping({
    requestTimeout: 30000,
    hello: "elasticsearch"
  },
  function (error) {
    if (error) {
      console.error('>>>My Bonsai url is>>>' + bonsai_url)
      console.error('>>>Elasticsearch cluster is down!');
    } else {
      console.log('All is well');
    }
  }
);

-说明还说 运行 $ export BONSAI_URL="https://username:password@my-awesome-cluster-123.us-east-1.bonsai.io"(换句话说 export BONSAI_URL="<your_BONSAI_URL>"),只有当您想要 运行 您的应用时,您才会这样做本地使用 ES。它不适用于远程

5.directions:

5.打开app.js文件,添加以下代码并保存文件:

var bonsai_url = process.env.BONSAI_URL;
var client = new elasticsearch.Client({
                         host: bonsai_url,
                         log: 'trace' 
                     });
    // Test the connection...
client.ping({
    requestTimeout: 30000,
    hello: "elasticsearch"
  },
  function (error) {
    if (error) {
      console.error('>>>My Bonsai url is>>>' + bonsai_url)
      console.error('>>>Elasticsearch cluster is down!');
    } else {
      console.log('All is well');
    }
  }
);

6•curl -X POST http://localhost:9200/firebase

6.comments:

-跳过这一步,因为此时你的 cpu 上没有本地 ES 来索引

6.directions:

6. 跳过这一步

7•cd flashlight

7.comments:

-不需要 运行 这个,你应该还在你的 flashlight 文件夹里

7.directions:

7. 跳过这一步

8•heroku login

8.comments:

-打开终端

-您必须输入 Herokuemail addresspassword. 当您输入密码时,它将显示为空白

8.directions:

8A. 运行: heroku login

8B. 在提示符处输入您的 email addresspassword 以登录 Heroku

9•heroku create (add heroku to project)

9.comments:

-这就是您不需要在步骤 1D 中创建 heroku 应用程序的原因。现在您将创建并命名您的 heroku 应用

-输入 create 后,您需要输入您希望 heroku 应用程序名称的任何名称。即我选择名称 sneakersearchinstanceAtoZ

-如果您登录 Heroku,执行此命令后 运行,您应该会看到列出的应用程序名称。转到右上角,单击 9 dots,选择 Dashboard

9.directions:

9. 运行: heroku create sneakersearchinstanceAtoZ

10•heroku addons:add bonsai (install bonsai)

10.comments:

-您需要在 运行 这一步之前将 credit card 添加到您的 Heroku 帐户,否则在您 运行 之后它会说您必须这样做它。不过,它仍然是一个免费计划。我不确定你是否可以在没有卡的情况下添加 Bonsai add on

-要添加信用卡一直到右侧,单击圆形图标,选择 Account Settings,然后选择 Billing

-您现在需要将 bonsai 添加到您的 heroku app。您可以通过 运行ning heroku addons:add bonsai --app <your-app-name>

-<your-app-name> 是您在第 9 步中创建的 heroku 应用的名称

-在你创建一个 bonsai cluster 之后,它会要求你通过 运行ning heroku addons:open bonsai

打开集群

10.directions:

10A.登录Heroku并在Billing Page

中添加信用卡

10B. 运行: heroku addons:add bonsai --app sneakersearchinstanceAtoZ//与第 9 步相同的名称

10C. 运行 heroku addons:open bonsai

11•heroku config (check bonsai instance info and copy your new BONSAI_URL you will need it later)

11.comments:

-运行 heroku config 会得到你所有的 environment variables 和它们对应的值。当您看到 bonsai's url 时,复制它的值,您将需要它来执行步骤 12B 和 17

-这与您将在步骤 10C

中看到的 url 完全相同

-bonsai url 可能类似于 https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net

11.directions:

11A. 运行: heroku config

11B.复制返回的bonsai url

12•heroku config:set FB_NAME= FB_TOKEN="" (declare environment variables)

12.comments:

-12A 是必需的。您需要使用项目的 GoogleService-Info.plistPROJECT_IDFB_NAMEAPI_KEYFB_TOKEN 这一步

-12B 是可选的。如果你想连接到 ElasticSearch 本地 运行 这个。您必须设置 bonsai url 以便 运行ning node app.js 不会抛出连接错误。您可以通过 运行ning: export BONSAI_URL="<your_bonsai_url>" 来完成此操作。你需要 运行 这个命令minal session 或者如果你的 Heroku 应用程序下降 asleep/crashes.

-等号前后不要使用空格

12.directions:

12A(必需)。 运行:heroku config:set FB_NAME=sneakersearch-az12 FB_TOKEN=0012abc789xyz00019

12B(可选).运行: export BONSAI_URL="https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net"

13•git add config.js (update)

13.comments:

-如果您 运行 这样做,您可能会收到一条错误消息: 您的 .gitignore 文件之一忽略了以下路径: config.js 如果你真的想添加它们,请使用 -f。

-就是说到运行git add config.js然后在最后加上-f

13.directions:

13A. 运行: git add config.js

13B.如果有错误运行:git add config.js -f

14•git commit -m "configure bonsai"

14.directions:

14. 运行: git commit -m "configure bonsai"

15•git push heroku master (deploy to heroku)

15.directions:

15. 运行: git push heroku master

16•heroku ps:scale worker=1 (start dyno worker)

16.comments:

-此命令的作用的答案在这里

16.directions:

16. 运行: heroku ps:scale worker=1

17•curl -X POST /firebase (ex: https://username:password@yourbonsai.bonsai.io/firebase)

17.comments:

-在开始此步骤之前,请阅读@DoesData 更新的答案(在我的下方)以使用 curl -X PUT 而不是 POST

-获取您从步骤 11B

复制的 bonsai url

-在curl -X POST命令后粘贴url,并确保在其末尾添加/firebase

-它的作用是创建一个名为 /firebase 的索引,指向您的 bonsai url。打开 config.js 文件并查找 exports.paths(第 62 行)。有一个名为 index: "firebase"(line 65) 的 key/value 对,该值指向您刚刚创建的索引并从那里访问 ES 集群

-基本上在您的 config.js 文件中,第 65 行 indexfirebase 必须与您添加到末尾的名称 /firebase 完全匹配 curl -X POST 命令。如果名称不匹配,那么 none 将起作用。

-如果成功,您应该会收到此响应:{"acknowledged":true}

17.directions:

17. 运行: curl -X POST https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net/firebase

18•Now time to use Step 5 node app.js (run the app)

18.comments:

-运行执行此命令将在本地启动应用程序。您也可以 运行 npm start 但无论哪种方式,它都会在您的本地计算机上启动它,您需要 运行 步骤 12B(可选)中的代码才能工作

18.directions

18. 运行: node app.js

19• set your mappings object(s)

仅供参考,第 19 步非常重要。您必须设置您的 MAPPINGS OBJECT 和它的 KEYS。我没有足够的字符在这里详细解释它。这就是第 4 步的 type 键用来设置的内容。观看此视频,了解如何设置您的 mappings object: https://www.youtube.com/watch?v=h3i3pqwjtjA&feature=youtu.be

19.directions:

19A. --打开TextEditSublime然后创建一个文件并命名为sneakerfile.json。保存并将文件拖到 flashlight 文件夹中。您需要 .json 扩展名。

19B. - 在该文件中添加以下代码,保存并关闭文件:

{
  "sneakers": {
     "properties": {
       "sneakercondition": {
         "type": "string"
       },
       "sneakername": {
         "type": "string"
       }
     }
  }
}
//notice this is just like the Swift Sneakers Data Model declared at the beginning

19C.抓住你的BONSAI_URL运行heroku config:get BONSAI_URL。我的BONSAI_URLhttps://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net

19D. 运行: curl -XPOST https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net/firebase/sneakers/_mapping -d@sneakerfile.json

19E. 运行: curl -XGET <BONASI_URL>/firebase/sneakers/_mapping?pretty

完成第 1 部分。第 2 部分将详细说明第 19 步

更多信息-

Heroku 命令:

检查您的 dyno

运行: heroku ps

如果你得到以下内容,请参考下面的links

=== web (Free): npm start (1)
web.1: crashed 2017/01/01 12:00:00 -0500 (~ 38m ago)

=== worker (Free): node ./app.js (1)
worker.1: crashed 2017/01/01 12:00:00 -0500 (~ 10m ago)

创建 Heroku app 后,您的 dyno 位于 Heroku Free Plan 下。如果在特定时间范围内未使用,它最终将 fall asleep/crash。要停止 sleeping/crashing 关注

Easy way to prevent Heroku idling?

https://devcenter.heroku.com/articles/free-dyno-hours

https://devcenter.heroku.com/articles/dyno-sleeping

其他命令:

heroku help //help
heroku status //Heroku platform status
heroku logs //displays 100 logs
heroku logs --tail //realtime logs
heroku logs --tail | grep worker //dyno worker logs
heroku ps -a <heroku app name> //how many dyno hrs you have left
heroku config:get BONSAI_URL //gets only your bonsai url
heroku config //all your environment variables
heroku apps:info //your Heroku credentials 

返回command promptCtrl+C

您也可以联系 Heroku 支持或 Bonsai 支持,因为他们非常有帮助

我很快就会 post 第 2 部分。

上面的回答很好。但是,我的更新有太多的评论在那里有用,所以我把它放在这里。

如果您按照上述步骤操作,您将在步骤中遇到错误:

  1. 运行: curl -X POST https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net/firebase

较新版本的 elasticSearch 不再允许您使用 POST 创建新索引,但您可以使用 PUT。所以你想 运行

curl -X PUT https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net/firebase

响应应为:{"acknowledged":true,"shards_acknowledged":true}

有关详细信息,请参阅

更新

我也切换到 Algolia,因为文档更加清晰。但是,我会说弹性搜索文档急需更新。我建议那些对弹性搜索感兴趣的人尝试使用 Firebase 云函数而不是 Heroku 来部署他们的代码。我还没有找到这方面的指南,但是 node.js 代码应该是相似的,除了它将被部署到 Firebase 云而不是 Heroku。这应该会使过程简单得多。您可以查看 Firebase 云函数 here