Настройка 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 в дополнение к проекту Swift 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 -имя приложения- здесь»?

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.-ВОПРОС: Для чего это?


person Lance Samaria    schedule 19.12.2016    source источник


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

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

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

1.комментарии:

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

-Вам НУЖНО выполнить следующие шаги 1A-1E по порядку, прежде чем продолжить

1.направления:

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

1B. Загрузите и установите Heroku Toolbelt (он был переименован в Heroku CLI) по адресу https://devcenter.heroku.com/articles/heroku-cli. К вашему сведению, я использовал установщик OS X, а не 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 переходите в папку кроссовокSearchFolder- т.е. запускаете: cd Desktop/sneakerSearchFolder

-Оказавшись в папке crosserSearchFolder, вы clone the github repo перейдете по адресу https://github.com/firebase/flashlight.

-Важно Затем вы cd переходите в папку 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. пробег: 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•установка нпм

С этого момента очень важно, чтобы вы находились внутри папки flashlight, а не в папке основного проекта, чтобы все работало, иначе вы получите ошибки

3.комментарии:

-Вы все еще должны быть в папке flashlight

- Войдите в Firebase, в консоли вашего проекта FB перейдите к Project's Settings (маленький круглый значок рядом с Overview), в настройках проекта выберите SERVICE ACCOUNTS, перейдите в раздел Firebase Admin SDK. Есть 2 вещи, которые вы должны сделать здесь. 1. Найдите и скопируйте свой Firebase service account, он выглядит так: [email protected] и 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
    });

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

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

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

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

3.направления:

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

3B. Войдите на страницу SERVICE ACCOUNTS своего Firebase Console и нажмите кнопку 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: "[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, вставьте/сохраните в него приведенный выше код с правильными значениями.

3 часа пробег: npm install

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

4.комментарии:

-В вашей папке 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 exp в шаге 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 Fields — это keys, которые будут проиндексированы в 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'; на 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• узел app.js (запустить приложение)

5.комментарии:

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

6.комментариев:

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

6.направления:

6. ПРОПУСТИТЕ ЭТОТ ШАГ

7•cd фонарик

7.комментариев:

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

7.направления:

7. ПРОПУСТИТЕ ЭТОТ ШАГ

8• логин героку

8.комментарии:

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

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

8.направления:

пробег: heroku login

8B. В ответ на приглашение введите свои email address и password для входа в Heroku.

9•heroku create (добавить героку в проект)

9.комментарии:

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

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

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

9.направления:

9. пробег: heroku create sneakersearchinstanceAtoZ

10•heroku addons: добавить бонсай (установить бонсай)

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. запуск: heroku addons:add bonsai --app sneakersearchinstanceAtoZ//то же самое имя из шага 9

10C запустить heroku addons:open bonsai

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

11.комментариев:

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

-Это тот же самый URL, который вы увидите на шаге 10C.

- bonsai url может выглядеть как https://abc123a01:[email protected]

11.направлений:

11A. пробег: heroku config

11B. Скопируйте возвращаемый bonsai url

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

12.комментариев:

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

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

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

12.направлений:

12A(ОБЯЗАТЕЛЬНО). запуск: heroku config:set FB_NAME=sneakersearch-az12 FB_TOKEN=0012abc789xyz00019

12B (необязательно).run: export BONSAI_URL="https://abc123a01:[email protected]"

13• git добавить config.js (обновление)

13.комментариев:

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

-Он говорит запустить git add config.js, а затем добавить -f в конце

13.направлений:

13A. пробег: git add config.js

13B. Если есть ошибка, выполните: git add config.js -f

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

14.направлений:

14. пробег: git commit -m "configure bonsai"

15•git push heroku master (развертывание на героку)

15.направлений:

15. пробег: git push heroku master

16•heroku ps:scale worker=1 (запуск динамометра)

16.комментариев:

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

16.направлений:

16. пробег: heroku ps:scale worker=1

17•curl -X POST /firebase (пример: https://username:[email protected]/firebase)

17.комментариев:

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

-Возьмите bonsai url, который вы скопировали из шага 11B.

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

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

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

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

17.направлений:

17. пробег: curl -X POST https://abc123a01:[email protected]/firebase

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

18.комментариев:

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

18.направлений

18. пробег: node app.js

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

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

19.направлений:

19A. --откройте TextEdit или 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 heroku config:get BONSAI_URL. Мой BONSAI_URL: https://abc123a01:[email protected]

19D. пробег: curl -XPOST https://abc123a01:[email protected]/firebase/sneakers/_mapping [email protected]

19E. пробег: curl -XGET <BONASI_URL>/firebase/sneakers/_mapping?pretty

Выполнено с частью 1. Часть 2 подробно объяснит шаг 19

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

Команды Heroku:

Чтобы проверить свой 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 или Bonsai, так как они очень полезны

Очень скоро я опубликую вторую часть.

person Lance Samaria    schedule 20.01.2017
comment
Привет, @Lance Samaria, когда ты опубликуешь вторую часть? Это то, что я искал!!! iOS + ElasticSearch + Firebase! Большое спасибо! - person Glenn Posadas; 11.02.2017
comment
@ prettyitgirl.com привет, дай мне 2 недели. Причина в том, что это много работы, и я до сих пор не понимаю несколько вещей. Для шага 19 вам нужно установить ключ сопоставления с файлом. Создайте файл: тапки file.json и внутри файла: {кроссовки: {свойства: {кроссовки: {тип: строка}, кроссовки: {тип: строка} } } } и затем на cli установите ключ следующим образом: curl -XPOST ‹BONSAI_URL›/firebase/sneakers/_mappings [email protected] затем запустите: curl -XGET ‹BONSAI_URL›/firebase/_mappings?pretty - person Lance Samaria; 12.02.2017
comment
@ prettyitgirl.com это видео очень хорошо объясняет: youtube.com/watch?v =h3i3pqwjtjA&feature=youtu.be. Шаг 19 основан на этом видео. На шаге 4 вы устанавливаете ключ «тип» и «поля». Даже без ключа «поля» вы должны сделать этот шаг. Просто посмотрите видео, а затем попробуйте следовать моему комментарию выше. Если ты потерялся, я вернусь позже или в другой день и проведу тебя через это. - person Lance Samaria; 12.02.2017
comment
@prettyitgirl.com Я забыл сказать, что если вы хотите сделать фонарик доступным для клиента, вам нужно сделать API-вызов от клиента к фонарику и обратно. Таким образом, в вашем приложении iOS внутри вашего searchController вы делаете оттуда вызов API для фонарика, а фонарик выполняет поиск в firebase и возвращает результаты методу updateSearchResultsForSearchController. - person Lance Samaria; 12.02.2017
comment
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат< /а>. - person Cody Gray; 13.08.2017

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

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

  1. запустите: curl -X POST https://abc123a01:[email protected]/firebase

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

curl -X PUT https://abc123a01:[email protected]/firebase

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

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

Обновить

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

person DoesData    schedule 11.08.2017
comment
Мне пришлось добавить много символов, чтобы добавить все, что вы написали, поэтому мне пришлось удалить некоторые слова здесь и там. В нижней части указаний на шаге 17 жирным шрифтом я сказал, что если они получат ошибку, чтобы прочитать ваш обновленный ответ. Кроме того, у некоторых людей все еще может быть более старая версия, а у автора GitHub все еще есть сообщение curl X на странице. - person Lance Samaria; 11.08.2017
comment
вы должны привести пример того, как будет выглядеть ошибка, если кто-то использует команду Post вместо команды Put. Мне на самом деле любопытно, потому что мне придется пройти через это снова для другого проекта. - person Lance Samaria; 17.08.2017