iOS Firebase Flashlight/ElasticSearch Heroku Настройка с использованием Node.JS

Я создаю iOS-приложение на Swift с бэкэндом Firebase. Мне нужны расширенные параметры поиска для моего приложения. Мне сказали, что я должен использовать Flashlight/ElasticSearch по этой ссылке на github https://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 завершена.

Я перечислил 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, которую я должен настроить для своего проекта, используя node.js в дополнение к проекту Firebase swift, который я уже сделал?

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. толчок к мастеру

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

15.-ВОПРОС: Для чего это нужно?

2 ответа

Решение

Это ответ из двух частей, первая часть которого проходит по направлениям Github и заканчивается на шаге 19. Вторая часть содержит больше информации, которая не вписывается в первую часть, и она будет подробно описана на шаге 19. Я должен добавить это к другому вопросу и связать это с этим.

Вот Github шаги перечислены в порядке. К вашему сведению, я держал оригинальные шаги в соответствии с тем, как оригинал Github author перечислил их, но под ними я поставил несколько подэтапов с подробными объяснениями и указаниями под каждым.

Предполагая, что вы уже создали Firebase проект и получил ваш GoogleService-Info.plist файл

Открыть свой 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 а также 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: 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 Data Model: (это будет соответствовать тому, что вы положили в свой объект сопоставлений на шаге 19)

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

VC с путями к файлам, куда я отправляю данные в Firebase, а searchSnkPath - это отдельный путь к файлу, по которому Бонсай будет выполнять поиск:

@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 keys названный sneakercondition а также 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 (шаг 2А) вам нужно cd в flashlight папка (шаг 2B), так как ВСЕ шаги с этого момента происходят внутри flashlight папка, а не папка вашего основного проекта XCode. Ничто не будет работать в папке вашего проекта Xcode, потому что у него нет файла package.json

Часть 1 - Github шаги:

1 • Установите и запустите ElasticSearch или добавьте сервис Bonsai через Heroku

1.comments:

- Bonsai будет добавлен на шаге 10

-Для продолжения необходимо выполнить следующие шаги 1A-1E.

1.directions:

1А. Загрузить и установить Node.js с https://nodejs.org/en/download/

1В. Загрузите и установите Heroku Toolbelt (это было переименовано Heroku CLI) по адресу https://devcenter.heroku.com/articles/heroku-cli. К вашему сведению, я использовал OS X Installer, а не OS X Homebrew.

1С. После того, как вы загрузили и установили Heroku Toolbelt/CLI войдите на Heroku.com и создайте аккаунт

1D. После создания Heroku нет необходимости создавать новый аккаунт Heroku App Вы сделаете это в шаге 9, используя командную строку. Это очень просто

1E. Откройте терминал и запустите: node -v узнать ток node version ваш бег (например, вы получаете v6.9.1). На шаге 2D вы должны убедиться, что версия оттуда соответствует этому выводу.

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

2.comments:

Предположим, что проект Xcode живет на рабочем столе в папке с именем sneakerSearchFolder

-Внутри вас терминал cd в папку sneakerSearchFolder, т.е. запустите: cd Desktop/sneakerSearchFolder

-Как только внутри кроссовок clonethe github repo на https://github.com/firebase/flashlight

- Важный ты тогда cd в flashlight папка т.е. запустить: cd flashlight

-Тебе понадобится node version ваш бег в соответствии с https://devcenter.heroku.com/articles/deploying-nodejs

-бежать: 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.directions:

2А. в терминале перейдите в любую папку, в которой находится ваш проект Xcode

2B. бежать: git clone https://github.com/firebase/flashlight

2C. бежать: cd flashlight

2D. бежать: node -v

2Е. Открой 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.comments:

-Ты все еще должен быть внутри вашего flashlight папка

-Войти в Firebase в консоли вашего проекта FB перейдите к Project's Settings (маленький круглый значок рядом с Overview), в настройках проекта выберите SERVICE ACCOUNTSперейти в раздел Firebase Admin SDK, Есть 2 вещи, которые вы должны сделать здесь. 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 раздел. Вам понадобятся 2 значения из Unknown файл (который теперь должен быть переименован service-account.json) чтобы инициализировать его. Значения в строках 5- private_key и 6- clientEmail, К вашему сведению clientEmail а также 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
    });

-FYI внутри Initialize the SDK раздел у вас также есть возможность использования верхней части, где он говорит path/to/serviceAccountKey.json и вместо этого вы можете указать путь к переименованному Неизвестному файлу. Я выбираю дно inline расстаться как было проще. Если вы выполняете эти шаги, вам не нужно беспокоиться об этом, хотя.

-Внутри flashlight папка есть app.js файл, скопируйте и вставьте приведенный выше код и поместите его в верхней части файла

-Задавить внутри терминала в командной строке запустить: npm install

-Если все хорошо, единственные предупреждения, которые вы должны иметь, это No repository field а также No license field

3.directions:

. Убедитесь, что вы внутри flashlight запуск папки: pwd

3B. Войдите в свой Firebase Console "s SERVICE ACCOUNTS страницу и нажмите Generate New Private Key кнопка, чтобы загрузить Unknown файл.

3C. Переименовать Unknown подать в service-account.json и поместите файл в свой flashlight папка

3D. Внутри service-account.json файл скопировать key названный client_email или вы можете скопировать информацию учетной записи службы на свой 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 файл, вставьте / сохраните вышеуказанный код внутри него с правильными значениями

3H. бежать: npm install

4 • отредактируйте config.js (см. Комментарии вверху, вы должны установить как минимум FB_URL и FB_SERVICEACCOUNT)

4.comments:

-Внутри ваш flashlight в папке есть файл с именем config.example.js, Открой это

-Внутри этого config.example.js файл, где вы найдете FB_URL а также FB_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'; это то, что используется для доступа к service-account.json file из шага 3C (нет необходимости добавлять или изменять что-либо здесь, так как оно получит к нему доступ самостоятельно)

- Теперь вам нужно установить путь, по которому ваши данные находятся (например, searchPath, используемый для отправки данных в FB внутри ViewController выше), индекс (шаг 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

- type опыт в шаге 19

-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...

-FYI Fields являются keys это будет проиндексировано в E S. Это необязательная вещь для добавления. Если бы у вас было 10 keys и только хотел, чтобы 2 из них были indexed тогда вы бы добавили это. Это означает, что из 10 ключей только те 2 keys будет доступен для поиска. Вы также можете использовать функцию разбора внутри config.js файл, чтобы сделать то же самое

-В дальнейшем сохраните / закройте 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';

4В. Строка 23 - это то, что используется для доступа к service-account.json файл (пока вы переименовали Unknown file на шаге 3С просто двигаться дальше)

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• узел app.js (запустить приложение)

5.comments:

Вы не будете запускать эту команду до самого конца, поэтому пропустите ее, но есть кое-что, что вы должны знать. Бег node app.js запускает приложение Heroku на локальном компьютере. Он будет искать ElasticSearch локально, которого у вас нет, поэтому вы получите ошибки соединения. Если вы хотите запустить его локально, вам придется запустить export BONSAI_URL="<your_bonsai_url>" код на шаге 12B-Необязательно, который необходим для устранения локальных ошибок соединения. Если ваше приложение засыпает / вылетает (опыт в конце), вам придется запустить 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>") это то, что вы бы сделали, только если вы хотите запустить свое приложение локально, чтобы использовать E S. Это не предназначено для удаленного

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:

-Пропустите этот шаг, потому что на данный момент у вас нет местного ES на вашем процессоре для индексации

6.directions:

6. Пропустить этот шаг

7• CD фонарик

7.comments:

-Не нужно запускать это, вы все равно должны быть внутри вашего flashlight папка

7.directions:

7. Пропустить этот шаг

8• Heroku Войти

8.comments:

-Открытый терминал

-Вы должны будете ввести свой Heroku "s email address а также password. Когда вы вводите пароль, он будет пустым

8.directions:

8А. бежать: heroku login

8В. В командной строке введите свой email address а также password войти в Heroku

9 • Героку создать (добавить героку в проект)

9.comments:

Вот почему вам не нужно было создавать heroku приложение на шаге 1D. Теперь вы создадите и назовите свое приложение heroku

-После того, как вы введете create вам нужно ввести любое имя, которое вы хотите, чтобы имя вашего приложения heroku было. т.е. я выбираю название sneakersearchinstanceAtoZ

-После запуска этой команды, если вы вошли в Heroku и вы должны увидеть имя приложения в списке. Идите в правый угол, нажмите 9 dots, выбирать Dashboard

9.directions:

9. запустить: heroku create sneakersearchinstanceAtoZ

10 • Герои аддонов: добавить бонсай (установить бонсай)

10.comments:

-Вы должны будете добавить 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.directions:

10A. войти Heroku и добавьте кредитную карту к Billing Page

10B. бежать: heroku addons:add bonsai --app sneakersearchinstanceAtoZ // то же самое точное имя из шага 9

10С. бежать heroku addons:open bonsai

11• конфигурация heroku (проверьте информацию об экземпляре бонсай и скопируйте ваш новый BONSAI_URL, он понадобится вам позже)

11.comments:

-Бег heroku config получит все ваши environment variables и их соответствующие значения. Когда вы видите ваш bonsai's url скопируйте его значение, оно понадобится вам для шагов 12B и 17

-Точно такой же URL вы увидите на шаге 10C

-The bonsai url может выглядеть примерно так https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net

11.directions:

11А. бежать: heroku config

11В. Скопируйте bonsai url это возвращается

12• конфигурация heroku: установить FB_NAME= FB_TOKEN="" (объявить переменные окружения)

12.comments:

-12A ТРЕБУЕТСЯ. Вы должны использовать свой проект GoogleService-Info.plist "s PROJECT_ID какой FB_NAME и API_KEY какой FB_TOKEN для этого шага

-12B не является обязательным. Если вы хотите подключиться к ElasticSearch локально запустить это. Вы должны будете установить свой bonsai url так что бег node app.js не будет выдавать ошибки соединения. Вы делаете это, запустив: export BONSAI_URL="<your_bonsai_url>", Вам нужно будет выполнить эту команду для каждого сеанса терминала или если ваше приложение Heroku засыпает / падает.

-Не используйте пробелы до или после знака равенства

12.directions:

12A (требуется). бежать: heroku config:set FB_NAME=sneakersearch-az12 FB_TOKEN=0012abc789xyz00019

12B(необязательно).run: export BONSAI_URL="https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net"

13 • git add config.js (обновление)

13.comments:

-Если вы запустите это, вы можете получить сообщение об ошибке: Следующие пути игнорируются одним из ваших файлов.gitignore: config.js Используйте -f, если вы действительно хотите добавить их.

- Это говорит, чтобы бежать git add config.js затем добавьте -f в конце

13.directions:

13А. бежать: git add config.js

13В. Если есть ошибка, запустите: git add config.js -f

14 • git commit -m "настроить бонсай"

14.directions:

14. запустить: git commit -m "configure bonsai"

15• Git Push Heroku Master (развернуть к героку)

15.directions:

15. запустить: git push heroku master

16 • Героку пс: шкала работника =1 (начало работы динамо)

16.comments:

- ответ на то, что делает эта команда, здесь может кто-нибудь объяснить "heroku ps: scale web = 1"

16.directions:

16. запустить: heroku ps:scale worker=1

17• curl -X POST / firebase (например: https://username:password@yourbonsai.bonsai.io/firebase)

17.comments:

- Прежде чем начать этот шаг, прочитайте обновленный ответ @DoesData (ниже мин), чтобы использовать вместо него curl -X PUT

-Схватить bonsai url вы скопировали с шага 11B

-Вставьте URL после curl -X POST команда и убедитесь, что вы добавляете /firebase до конца этого

-Что это делает, это создает индекс с именем /firebase это указывает на ваш bonsai url, Открыть свой config.js файл и искать exports.paths (строка 62). Это имеет пару ключ / значение с именем index: "firebase" (строка 65), значение указывает на индекс, который вы только что создали, и оттуда получает доступ к кластеру E S

-В основном в вашем файле config.js, в строке 65 index значение firebase должен точно соответствовать имени /firebase что ваше добавление в конец curl -X POST команда. Если имена не совпадают, то ничего из этого не будет работать.

- если успешно, вы должны получить этот ответ: {"acknowledged":true}

17.directions:

17. запустить: curl -X POST https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net/firebase

18• Теперь пришло время использовать узел шага 5 app.js (запустить приложение)

18.comments:

- Запуск этой команды запустит приложение локально. Вы также можете запустить npm start но в любом случае он запустится на вашем локальном компьютере, и вам нужно будет выполнить код на шаге 12B(необязательно), чтобы это работало

18.directions

18. запустить: node app.js

19 • установить ваши объекты сопоставления

К вашему сведению Шаг 19 очень важен. Вы ДОЛЖНЫ установить свой ОБЪЕКТ MAPPINGS, и это КЛЮЧИ. У меня не хватает символов, чтобы объяснить это подробно здесь. Это то, что Шаг 4 type ключ использует для установки. Посмотрите это видео, чтобы объяснить, как настроить mappings object : https://www.youtube.com/watch?v=h3i3pqwjtjA&feature=youtu.be

19.directions:

19А. --открыть TextEdit или же Sublime затем создайте файл и назовите его sneakerfile.json, Сохраните его и перетащите файл в свой flashlight папка. Вам нужно .json расширение.

19В. -В этом файле добавьте следующий код, сохраните и закройте файл:

{
  "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_URL - это https://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

Дополнительная информация-

Героку командует:

Чтобы проверить на вашем dyno

бежать: 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 ваш 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 Нажмите Ctrl+C

Вы также можете обратиться в службу поддержки Heroku или в службу поддержки бонсай, так как они очень полезны.

Я опубликую часть 2 очень скоро.

Приведенный выше ответ великолепен. Тем не менее, есть слишком много комментариев для моего обновления, чтобы быть полезным там, поэтому я размещаю его здесь.

Если вы выполните вышеуказанные шаги, вы увидите ошибку на шаге:

  1. запустите: curl -X POST https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net/firebase

Более новые версии asticSearch больше не позволяют создавать новый индекс с помощью POST, но вы можете использовать PUT. Итак, вы хотите запустить

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

и ответ должен быть: {"acknowledged":true,"shards_acknowledged":true}

Смотрите этот вопрос для получения дополнительной информации.

Обновить

Я также переключился на Алголию, потому что документация была намного более ясной. Однако я бы сказал, что гибкая поисковая документация остро нуждается в обновлении. Я бы порекомендовал тем, кто интересуется гибким поиском, попытаться развернуть свой код, используя облачные функции Firebase, а не Heroku. Я не смог найти руководство для этого, но код node.js должен быть похожим, за исключением того, что он будет развернут в облаке Firebase вместо Heroku. Это должно сделать процесс намного проще. Вы можете проверить функции облака Firebase здесь

Другие вопросы по тегам