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

2023-11-25

我正在使用 Firebase 后端使用 Swift 构建 iOS 应用程序。我的应用程序需要高级搜索选项。有人告诉我应该通过此 github 链接使用 Flashlight/ElasticSearchhttps://github.com/firebase/flashlight

假设我的应用程序的名称是 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”已完成。

我列出了 github 方向/步骤以及我为每个方向采取的步骤。我需要方向方面的帮助: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.我将上面的内容克隆到我的iOS应用程序的项目文件夹中

3.npm install

3.根据提示,我首先运行“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.-问题:我在哪里“编辑 config.js”并设置 FB_URL 和 FB_SERVICEACCOUNT?这应该在我的 package.json 文件中吗?

5.node app.js (run the app)

5.-问题:在终端中,我运行“node app.js”并得到“throw err;^”。为什么我收到此错误?

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

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

7.cd flashlight

7.切换到手电筒目录

8.heroku login

8.登录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.我想这个问题取决于步骤#10。

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

12.-问题:Firebase 令牌是什么?这是我的 Web_API_Key、App_URL 或 Project_ID 吗?我在 firebase 控制台中找不到任何特定于“令牌”的内容。我正在使用 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 步开始。我必须将其添加到另一个问题并将其链接到此问题。

这里有Github按顺序列出的步骤。仅供参考,我将原来的步骤与原来的步骤保持一致Github author列出了它们,但在下面我放置了一堆子步骤,每个步骤下都有详细的解释和说明。

假设您已经创建了一个Firebase项目并得到了你的GoogleService-Info.plist file

打开你的GoogleService-Info.plist文件。下列variables来自Github directions与相关GoogleService-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。因此,对于步骤示例,我将使用这些keys and values:

//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: [email protected] //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:[email protected]

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

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

VC 与文件路径,我将数据发送到 Firebase 和搜索SnkPath是一个单独的文件路径,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)
    }
  }
}

Inside FBDatabase我要搜索的数据的存储路径root/searchSnkPath/autoID它有 2keys named sneakercondition and sneakername代表数据。我想要从中提取搜索结果的路径是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•安装并运行ElasticSearch或通过Heroku添加Bonsai服务

1.评论:

-Bonsai将在第 10 步添加

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

1.路线:

1A.下载并安装Node.js from https://nodejs.org/en/download/

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

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

1D.创建后Heroku无需创建新帐户Heroku App您将在步骤 9 中使用命令行执行此操作。这很容易

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

2·git克隆https://github.com/firebase/flashlight

2.评论:

-假设 Xcode 项目位于桌面上名为的文件夹内sneakerSearchFolder

- 在航站楼内您cd到sneakerSearchFolder文件夹 - 即运行:cd Desktop/sneakerSearchFolder

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

-重要的然后是你cd to flashlight文件夹,即运行:cd flashlight

-您将需要node version你的跑步根据https://devcenter.heroku.com/articles/deploying-nodejs

-run: node -v得到什么node version正在运行在flashlight文件夹(即v6.9.1)稍后当你制作一个Heroku instance您将需要根据devcenter.heroku上面的链接

-现在你的里面flashlight文件夹,如果node version您刚刚运行的版本与步骤 1E 中的版本不匹配,您需要更新手电筒文件夹内的版本以使它们匹配。将 Node.js 升级到最新版本 如果两个版本都匹配那么你不必担心这个

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

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

2.路线:

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

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

2C. run: cd flashlight

2D. run: 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安装

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

3.评论:

-你应该还在你的里面flashlight folder

-登录到Firebase,在 FB 项目的控制台中,转到Project's Settings(旁边的小圆形图标Overview),在项目设置中选择SERVICE ACCOUNTS,转到该部分Firebase Admin SDK。您必须在这里做两件事。 1. 找到并复制您的Firebase service account, 看起来像[电子邮件受保护]2. 在页面底部,您必须单击Generate New Private Key按钮,它将下载一个Unknown file您需要将其重命名为service-account.json。如果它给文件命名除了Unknown只需将其重命名为service-account.json。重命名文件后将其拖到您的flashlight文件夹,因为步骤 4BFB_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部分。您将需要以下值中的 2 个:Unknown文件(现在应该重命名为service-account.json)来初始化它。这些值位于第 5- 行private_key and 6-clientEmail。仅供参考clientEmail and Firebase 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 field and No license field

3.路线:

3A。确保您的内部flashlight文件夹运行:pwd

3B.登录您的Firebase Console's SERVICE ACCOUNTS页面并单击Generate New Private Key按钮下载Unknown file.

3C.重命名Unknown文件至service-account.json并将文件放入您的flashlight folder

3D.在 - 的里面service-account.json文件复制key named client_email或者您可以将服务帐户信息复制到您的Firebase SERVICE ACCOUNTS page

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: "[email protected]", //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文件,使用正确的值粘贴/保存上面的代码

3H. run: npm install

4•编辑config.js(参见顶部的注释,您必须设置FB_URL和 至少 FB_SERVICEACCOUNT)

4.评论:

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

-在这个里面config.example.js文件是你找到的地方FB_URL and FB_SERVICEACCOUNT变量(它们列在第 13 行和第 23 行)

-你需要改变exports.FB_URL = process.env.FB_URL || 'https://<YOUR APP>.firebaseio.com'; to 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';是用来访问的service-account.json file从步骤 3C 开始(无需在此处添加或更改任何内容,因为它将自行访问)

-您现在必须设置数据所在的路径(例如搜索路径用于向上面的 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 exp in Step 19

-仅供参考,第 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...

-FYI Fieldskeys将在 ES 中建立索引。这是一个可选的添加内容。如果你有 10 个keys只想要其中 2 个indexed然后你会添加这个。这意味着 10 个键中只有那 2 个keys将是可搜索的。您还可以使用解析函数在 - 的里面config.js文件做同样的事情

- 然后保存/关闭config.example.js并重命名它config.js

4.路线:

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

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

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

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.保存/关闭config.example.js文件。现在重命名该文件config.js.

5•node app.js(运行应用程序)

5.评论:

-直到最后你才会运行这个命令,所以现在跳过它,但有一些你应该知道的事情。跑步node app.js在本地计算机上运行 Heroku 应用程序。它会在本地查找您没有的 ElasticSearch,因此您会收到连接错误。如果你想在本地运行它,那么你必须运行export BONSAI_URL="<your_bonsai_url>"步骤 12B-可选的代码,需要它来解决本地连接错误。如果您的应用程序进入睡眠状态/崩溃(接近结束时),您将不得不运行export BONSAI_URL="<your_bonsai_url>"再次命令。除此之外,当您将代码推送到 Heroku 时,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:[email protected]"(换句话说export BONSAI_URL="<your_BONSAI_URL>")只有当您想在本地运行应用程序以使用 ES 时,您才会这样做。它不适合远程

5.路线:

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 POSThttp://localhost:9200/firebase

6.评论:

- 跳过这一步,因为此时你还没有本地ES在你的CPU上建立索引

6.路线:

6.跳过此步骤

7•CD手电筒

7.评论:

-不需要运行这个,你应该仍然在你的flashlight folder

7.路线:

7.跳过此步骤

8·heroku登录

8.评论:

- 打开终端

-您必须输入您的Heroku's email address and password.当您输入密码时,它将显示为空白

8.路线:

8A. run: heroku login

8B.根据提示输入您的email address and password登录 Heroku

9•heroku create(将heroku添加到项目中)

9.评论:

-这就是为什么你不需要创建一个heroku应用程序在步骤 1D。现在您将创建并命名您的 heroku 应用程序

- 输入后create您需要输入您想要的 Heroku 应用程序名称。即我选择名字sneakersearchinstanceAtoZ

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

9.路线:

9. run: heroku create sneakersearchinstanceAtoZ

10•heroku插件:添加盆景(安装盆景)

10.评论:

- 您需要添加一个credit card给你的Heroku在运行此步骤之前先登录帐户,否则运行后它会说您必须执行此操作。但它仍然是一个免费计划。我不确定你是否可以添加Bonsai add on没有卡

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

-您现在需要添加bonsai给你的heroku app。你可以通过运行来做到这一点heroku addons:add bonsai --app <your-app-name>

-<your-app-name>是无论什么heroku您在第 9 步中创建的应用程序的名称

- 创建后bonsai cluster然后它会要求你通过运行来打开集群heroku addons:open bonsai

10.路线:

10A.登录到Heroku并将信用卡添加到Billing Page

10B. run: heroku addons:add bonsai --app sneakersearchinstanceAtoZ//与步骤 9 中的名称完全相同

10C. run heroku addons:open bonsai

11•heroku 配置(检查盆景实例信息并复制新的 BONSAI_URL 您稍后将需要它)

11.评论:

-跑步heroku config将会得到你所有的environment variables及其对应的值。当你看到你的bonsai's url,复制它的值,您将在步骤 12B 和 17 中需要它

-这与您在步骤 10C 中看到的 URL 完全相同

-The bonsai url可能看起来像https://abc123a01:[email protected]

11.路线:

11A. run: heroku config

11B.复制bonsai url返回的

12·heroku config:set FB_NAME= FB_TOKEN="" (声明 环境变量)

12.评论:

需要 -12A。您需要使用您的项目GoogleService-Info.plist's PROJECT_ID哪一个是FB_NAMEAPI_KEY哪一个是FB_TOKEN对于这一步

-12B 是可选的。如果您想连接到ElasticSearch本地运行这个。你必须设置你的bonsai url这样运行node app.js不会抛出连接错误。您可以通过运行以下命令来执行此操作:export BONSAI_URL="<your_bonsai_url>"。您将需要在每个终端会话或您的 Heroku 应用程序休眠/崩溃时运行此命令。

- 等号前后不要使用空格

12.路线:

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

12B(可选).run: export BONSAI_URL="https://abc123a01:[email protected]"

13·git add config.js(更新)

13.评论:

-如果您运行此命令,您可能会收到一条错误消息:您的 .gitignore 文件之一会忽略以下路径: 配置文件 如果您确实想添加它们,请使用 -f 。

-它说要跑git add config.js然后加-f在最后

13.路线:

13A. run: git add config.js

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

14·git commit -m“配置盆景”

14.路线:

14. run: git commit -m "configure bonsai"

15•git Push heroku master(部署到heroku)

15.路线:

15. run: git push heroku master

16•heroku ps:scaleworker=1(启动dynoworker)

16.评论:

- 该命令的作用的答案就在这里有人可以解释一下“heroku ps:scale web=1”

16.路线:

16. run: heroku ps:scale worker=1

17•curl -X POST /firebase (例如:https://用户名:[电子邮件受保护]/firebase)

17.评论:

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

-抓住bonsai url您从步骤 11B 复制

- 将网址粘贴到curl -X POST命令并确保添加/firebase到最后

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

-基本上在你的 config.js 文件中,第 65 行index value firebase必须与名称完全匹配/firebase你添加到最后curl -X POST命令。如果名称不匹配,那么这些都不起作用。

- 如果成功,您应该得到以下响应:{"acknowledged":true}

17.路线:

17. run: curl -X POST https://abc123a01:[email protected]/firebase

18•现在可以使用第 5 步 node app.js(运行应用程序)

18.评论:

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

18.方向

18. run: node app.js

19• 设置您的映射对象

仅供参考,第 19 步非常重要。您必须设置您的映射对象及其键。我没有足够的字符来详细解释它。这就是第 4 步的内容type键用于设置。观看此视频,了解如何设置您的mappings object:

19.路线:

19A. --open TextEdit or Sublime然后创建一个文件并命名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 run heroku config:get BONSAI_URL. My 盆栽_URL is https://abc123a01:[电子邮件受保护]

19D. run: curl -XPOST https://abc123a01:[email protected]/firebase/sneakers/_mapping [email protected]

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

完成第 1 部分。第 2 部分将详细解释步骤 19

更多信息-

Heroku 命令:

检查您的dyno

run: heroku ps

如果您看到以下内容,请参阅下面的链接

=== 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 your dyno是在Heroku Free Plan。最终会fall asleep/crash如果在一定时间内没有使用。要停止睡眠/崩溃,请遵循

防止 Heroku 空转的简单方法?

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 prompt press Ctrl+C

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

我很快就会发布第 2 部分。

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

使用 Node.JS 设置 iOS Firebase Flashlight/ElasticSearch Heroku 的相关文章

  • Firebase 云消息传递 (FCM) 令牌是否独一无二?

    我在 firebase 文档中找不到任何地方表明收到的令牌是唯一的 如果有人能指出我这样的地方 我将不胜感激 主要问题 我应该在数据库中为此类标记设置唯一约束吗 谢谢 根据文档 它们是唯一的 但您无法将它们绑定到特定设备 因为它们可能会发生
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • 如何列出所有活动的 firebase ci 令牌,或全部撤销它们

    我意识到您可以使用以下命令创建 firebase 令牌 firebase login ci 您可以通过执行以下操作来撤销单个令牌 firebase logout token
  • 在 AWS Lambda 中共享代码

    在 AWS Lambda 函数之间共享代码的首选方式是什么 我有这样的结构 functions a 节点模块 index js 包 json b 节点模块 index js 包 json c 节点模块 index js 包 json 这让每
  • 将输入数据发送到node.js中的子进程

    我正在编写代码以在 Node js 环境中创建在线 C 编译器 使用spawn函数我创建了一个子进程 它将编译代码并执行它并将输出发送回用户 但我需要将输入发送到正在运行的 C 程序 我用了child stdin write data 用于
  • VSCode Live Server 和 Node Live Server 的区别

    我正在开始使用 JS 所以我已经到了必须使用 npm 安装实时服务器的地步 VSCode 有一个很多人都知道的流行扩展 称为 Live Server Ritwick Dey 我的问题是使用该扩展和使用 Node 安装包有什么区别 是否有任何
  • 将应用转移到另一个 Firebase 帐户

    我的个人 Firebase 帐户下有一些应用程序用于测试 但现在需要将应用程序转移到客户的帐户以进行计费 这可能吗 Thanks 我最近将一个项目的所有权转移到另一个帐户 您所要做的就是 转到 Firebase 控制台 然后选择要转移的项目
  • 装饰器中间件模式的 Typescript 类型

    我正在考虑节点中间件 在各种框架中 通常 中间件会向请求或响应对象添加一个属性 然后该属性可供在其之后注册的任何中间件使用 此模型的一个问题是您无法进行有效的打字 为了进行演示 这里有一个此类框架的高度简化的模型 在这种情况下 一切都是同步
  • 节点遗留 url.parse 已弃用,用什么代替?

    require url parse someurl com page 已被仅弃用 并且我们严格的 linter 对此不满意 我尝试用互联网建议的内容替换我们的代码中的它new URL someurl com page 在大多数情况下都有效
  • Firebase 函数,在用户不活动 15 分钟后运行

    我创建了一个 firebase 存在系统 如图所示在 Firebase 中建立影响力 https firebase google com docs firestore solutions presence文档 现在 我尝试在用户离线 15
  • 从 puppeteer PDF 中删除分页符?

    我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
  • 带有node-gyp的node.js应用程序无法在azure网站上部署

    我已经建立了一个 Azure 网站 并且正在尝试使用依赖于 node gyp 的示例应用程序 我得到这个 emote gt email protected cdn cgi l email protection install C DWASF
  • 部署 Angular 通用应用程序时找不到模块“firebase/app”

    我已经处理这个问题近两周了 我尝试了很多解决方法 但似乎都不起作用 我已经安装了angular fire and firebase到最新版本 尝试过ng add angular fire 配置自定义webpack config ts 尝试回
  • 获取类中的所有静态 getter

    假设我有这个类 我像枚举一样使用它 class Color static get Red return 0 static get Black return 1 有没有类似的东西Object keys to get Red Black 我使用
  • React Uncaught TypeError:this.state.messages.map 不是一个函数

    我正在开发一个 React 应用程序 并且遇到了此映射函数的问题 render const messages this state messages map message gt return li message text li retu
  • Nodejs 在路由器页面中包含 socket.io

    我有一个 Express Node 应用程序 并且我试图通过不在 app js 中包含所有 socket io 内容来保持代码整洁 我不知道解决这个问题的最佳方法 这是我最初的想法 感觉不是最干净的 app js var express r
  • jest 无限期挂起,不运行任何测试

    每次我运行 jest 时它都不会运行任何东西 我已经让计数器任意升高 我用 no cache 运行 jest jest debug 输出如下 configs automock false browser false cache true c
  • 设置环境变量供节点检索

    我正在尝试遵循教程 它说 有几种加载凭据的方法 从环境变量加载 从磁盘上的 JSON 文件加载 键需要如下所示 USER ID USER KEY 这意味着如果您正确设置环境变量 您 根本不需要管理应用程序中的凭据 根据一些谷歌搜索 我似乎需
  • 如何与使用 child_process.spawn 创建的新创建的服务器交互

    我正在尝试为我的私人托管的 反恐精英全球攻势 服务器制作一个前端 当我点击运行服务器时 在前端 一切正常 服务器启动并记录到控制台 但是如何查看服务器IP地址 服务器中的玩家等信息呢 这是我到目前为止运行服务器的内容 router post
  • 如何在 NodeJs 中发送 Google 索引批量请求的多部分/混合请求?

    我正在使用 Nodejs 进行连接谷歌API v35 0 0 https www npmjs com package googleapis告诉 Google 更新或从 Google 索引中删除页面 当我通过发送请求时 我陷入了多部分 混合请

随机推荐

  • python numpy 用不同的值填充矩阵对角线

    我看到一个函数numpy fill diagonal它为对角元素分配相同的值 但我想为每个对角元素分配不同的随机值 我怎样才能在 python 中做到这一点 可能正在使用 scipy 或其他库 那docs调用填充val标量是一个现有的文档错
  • 从服务器读取具有一定偏移量的文件

    如何从服务器读取以某个偏移量开头的文件 类似于wget c 我必须向服务器发送哪些标头 服务器必须支持哪些期货 您应该使用Range请求中的标头 但只有当服务器通知您它接受范围请求时 您才可以使用它Accept Ranges响应头 这是一个
  • CSS 表格单元格等宽

    我在表格容器内有不确定数量的表格单元格元素 div style display table div style display table cell div div style display table cell div div 是否有一
  • C++包含头文件问题

    我是 c c 新手 我对以下内容感到困惑 我是否应该将类声明放在自己的头文件中 并将实际实现放在另一个文件中 我是否应该放置标题
  • 如何抑制列表属性的 XML 标记

    序列化时是否可以避免列表属性标签 Serializable removed unnecessary public class Foo protected List
  • 更改选定段控件的颜色

    在我的应用程序中 我能够更改所选段控件的颜色 但是颜色会针对另一个索引而不是所选索引进行更改 我可以在索引中找到任何错误 Help me 我的代码如下 if SegmentRound selectedSegmentIndex 0 UICol
  • 指定通用参数的构造函数约束[重复]

    这个问题在这里已经有答案了 我有一个对象集合 我将其作为参数传递以创建另一种类型的对象 一对一 我在很多地方都这样做 基本上是从数据对象转换为业务对象 我想编写一个通用扩展方法来完成此任务 但我陷入困境 因为我不知道如何指定业务对象具有以数
  • 在 OS X 上安装 h5py

    我花了一天的时间试图得到h5pypython 模块工作 但没有成功 我已经安装了 HDF5 共享库 并按照我在网上找到的说明进行操作以使其正确 但它不起作用 下面是我尝试将模块导入 python 时收到的错误消息 我也尝试通过 MacPor
  • jqXHR - http-status-code-403(但状态代码为0)

    我得到状态代码 0 但它是代码 403 有人能告诉我问题是什么吗 JQUERY var jqxhr ajax url http gdata youtube com feeds api users bernd favorites alt js
  • IE9数组不支持indexOf

    基于http ie microsoft com testdrive HTML5 ECMAScript5Array Default html 我认为 IE9 支持数组中的 indexOf 但以下中断 知道为什么吗 错误信息如下 SCRIPT4
  • Laravel phpunit 没有获得正确的 url

    我已将 app url 配置值更改为正确的 url http testing local 用于本地测试 但是当我运行 phpunit 测试并尝试调用 时 它正在尝试查询http localhost而不是 app url 的值 我需要做什么才
  • 如何使用Chart.js显示折线图数据集点标签?

    我的设计要求是显示包含 5 个趋势数据集的折线图 沿着笔画线的每个数据值需要在其各自的数据点处显示数据值标签 不幸的是 我在 Charts js 中找不到满足此要求的选项 有解决方法可以帮助我吗 我也在小提琴上发布了这个 http jsfi
  • 我们如何改变SQL Server的页面大小?

    Per MSDN 在 SQL Server 中 页大小为 8 KB 这意味着 SQL Server 数据库 每兆字节有 128 页 我们如何更改页面大小 例如4 KB 或 12 KB 等 还有 是不是因为 innate硬件限制 页面大小选择
  • 如何使用 lxml 从本地文件或 url 解析 xml?

    我尝试使用lxml来解析xml 但我有一个问题 ValueError invalid x escape 这是我的代码 from lxml import etree root etree fromstring C Users hptphuon
  • 为什么必须调用 URLConnection#getInputStream 才能写入 URLConnection#getOutputStream?

    我正在尝试写信给URLConnection getOutputStream 但是 在我调用之前没有实际发送数据URLConnection getInputStream 即使我设定URLConnnection doInput为false 仍然
  • 如何从 节点中获取 href 属性值?

    我们从供应商那里获得了一个 XML 文档 我们需要使用他们的样式表执行 XSL 转换 以便我们可以将生成的 HTML 转换为 PDF 实际的样式表在href的属性 xml stylesheetXML 文档中的定义 有什么方法可以使用 C 获
  • 程序集绑定错误:绑定结果:hr = 0x80070002。该系统找不到指定的文件

    我有一个 Visual Studio 2010 解决方案 其中包含一个类库 ProjectA 和两个 Sharepoint 项目 ProjectB 和 ProjectC 依赖顺序是 ProjectB 引用 ProejctA ProjectC
  • 如何阻止 webview2 打开新的浏览器窗口而不是在浏览器内部

    我想知道是否有办法阻止 webview2 组件打开浏览器窗口 以获胜形式 What is happening 我到处找 但没找到 但我确实找到了 但它使用了 XAML UWP 一页使用了 xaml 但代码无法工作 因为它的 XAML 和我使
  • 使用字符串类型参数访问枚举时出现 TypeScript TS7015 错误

    我是 TypeScript 新手 我不明白需要做什么来修复生成 TS7015 错误的行 使用字符串变量引用枚举成员 因为紧随其后的行不会出错 使用字符串引用枚举成员 字符串文字 enum State Happy 0 Sad 1 Drunk
  • 使用 Node.JS 设置 iOS Firebase Flashlight/ElasticSearch Heroku

    我正在使用 Firebase 后端使用 Swift 构建 iOS 应用程序 我的应用程序需要高级搜索选项 有人告诉我应该通过此 github 链接使用 Flashlight ElasticSearchhttps github com fir