Lampe de poche iOS Firebase / Configuration d’Heroku ElasticSearch avec Node.JS

Je construis une application iOS dans Swift avec un backend Firebase. J’ai besoin d’options de recherche avancées pour mon application. On m’a dit que je devrais utiliser Flashlight / ElasticSearch via ce lien github https://github.com/firebase/flashlight

Supposons que le nom de mon application est SneakerSearch et que mon

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

J’ai besoin de quelques conseils concernant les étapes à suivre pour configurer cela car je suis nouveau dans Heroku et Node.js. Je n’ai jamais appris non plus auparavant, mais j’ai déjà installé la courroie d’outils Heroku et l’installation de «sudo gem heroku» est terminée.

J’ai énuméré les directions / étapes de github et les étapes que j’ai sockets pour chaque direction. J’ai besoin d’aide pour les directions: 1,4,5,6,9,10,12 et 15.

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

1. Je crée un compte chez Heroku.

1.-QUESTION: Dois-je créer le nom de mon application et la déployer après avoir configuré mon compte Heroku ou dois-je attendre jusqu’à l’étape 9?

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

2.Je clone ce qui précède dans le dossier de projet de mon application iOS

 3.npm install 

3.À l’invite, je lance d’abord “npm init” puis “npm install”

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

4A.-QUESTION: Qu’est-ce que “FB_SERVICEACCOUNT”? J’utilise Firebase 3 et je n’ai rien trouvé sur un compte de service dans ma console. Est-ce un autre compte Firebase que je dois configurer pour mon projet en utilisant node.js en plus du projet Firebase swift que j’ai déjà créé?

4B.-QUESTION: Où dois-je “éditer le fichier config.js” et définir mes FB_URL et FB_SERVICEACCOUNT à? Est-ce que cela devrait être dans mon fichier package.json?

 5.node app.js (run the app) 

5.-QUESTION: Dans le terminal, j’ai lancé “node app.js” et obtenu “throw err; ^”. Pourquoi ai-je eu cette erreur?

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

6.-QUESTION: A quoi ça sert?

 7.cd flashlight 

7. basculé vers le répertoire de la lampe de poche

 8.heroku login 

8. connecté à Heroku

 9.heroku create (add heroku to project) 

9A-QUESTION: Lorsque j’ai créé mon compte pour la première fois chez Heroku, aurais-je dû créer une nouvelle application portant le nom de mon application et l’avoir déployée à l’aide des instructions git répertoriées? Si je n’aurais pas fait cela au début, est-ce que l’exécution de “heroku create” gérera ce processus pour moi?

9B-QUESTION: Est-ce que je lance simplement “heroku create” ou est-ce que je lance “heroku create -app nom_app” ici?

 10.heroku addons:add bonsai (install bonsai) 

10.-QUESTION: Dois-je créer un compte sur Bonasi.io et l’installer avant cette étape ou est-ce que cela crée un compte bonsaï pour moi? Je n’ai jamais utilisé de bonsaï auparavant.

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

11.Je suppose que cette question dépend de l’étape 10.

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

12.-QUESTION: Qu’est-ce que le TOKEN Firebase? S’agit-il de mon Web_API_Key, App_URL ou Project_ID? Je n’ai rien trouvé de spécifique au “jeton” dans ma console Firebase. J’utilise Firebase 3.

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

13. commet un message

 14.git push heroku master (deploy to heroku) 

14. pousser à maîsortingser

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

15.-QUESTION: A quoi ça sert?

Il s’agit d’une réponse en 2 parties, la 1ère partie passant par les instructions Github et se terminant à l’étape 19. La 2ème partie contient plus d’informations qui n’entrent pas dans la 1ère partie et débute à l’étape 19 en détail. Je vais devoir l’append à une autre question et le lier à ceci.

Voici les étapes Github énumérées dans l’ordre. Pour info, j’ai gardé les étapes initiales en phase avec la façon dont l’ Github author original de Github author répertoriées, mais en-dessous, j’ai mis un tas de sous-étapes avec des explications détaillées et des instructions sous chacune d’elles.

En supposant que vous ayez déjà créé un projet Firebase et obtenu votre fichier GoogleService-Info.plist

Ouvrez votre fichier GoogleService-Info.plist . Les variables suivantes variables Github directions corrélation avec les 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 

Sous chaque étape du Github , j’ai des commentaires, puis des instructions. Dans les directions où j’utilise les valeurs ci-dessous, vous devriez plutôt utiliser project's values votre project's values . Donc, pour les exemples d’étape, je vais utiliser ces keys et 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 

Modèle de données Swift: (cela correspond à ce que vous avez mis dans votre object de mappage à l’étape 19)

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

VC avec les chemins de fichiers où j’envoie des données à Firebase et searchSnkPath est un chemin de fichiers séparé sur lequel Bonsai exécutera ses recherches:

 @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 = [Ssortingng: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) } } } 

Dans FBDatabase le chemin dans lequel mes données à rechercher sont stockées est situé dans le root/searchSnkPath/autoID . Il comporte 2 keys nommées sneakercondition et sneakername qui représente les données. Le chemin sur root/searchSnkPath je veux extraire mes résultats de recherche est root/searchSnkPath

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

Si je veux effectuer une recherche sur le searchSnkPath et interroger ces 2 keys puis à l’intérieur du fichier config.js , je trouverais exports.paths et à l’intérieur, il y a l’endroit où je placerais les informations de recherche

 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) } ] 

L’étape 4 couvre tout cela

Important après avoir exécuté git clone https://github.com/firebase/flashlight (étape 2A), vous devez vous cd au dossier de la flashlight (étape 2B), car TOUTES les étapes à partir de ce moment se déroulent à l’intérieur du dossier de la flashlight et NON de votre principal. Dossier du projet Xcode. Rien ne fonctionnera dans le dossier de votre projet Xcode car il ne possède pas de fichier package.json

Partie 1 – Les étapes de Github:

1 • Installer et exécuter ElasticSearch ou append un service Bonsai via Heroku

1.comments:

Bonsai sera ajouté à l’étape 10

-Vous devez avoir les étapes suivantes 1A-1E dans l’ordre avant de continuer

1.directions:

1A. Téléchargez et installez Node.js à l’ adresse https://nodejs.org/en/download/

1B. Téléchargez et installez Heroku Toolbelt (il a été renommé Heroku CLI ) à l’ adresse https://devcenter.heroku.com/articles/heroku-cli . Pour info, j’ai utilisé le programme d’installation OS X et non pas OS X Homebrew.

1C. Après avoir téléchargé et installé le Heroku Toolbelt/CLI connectez-vous à Heroku.com et créez un compte.

1D. Après avoir créé un compte Heroku , vous n’avez pas besoin de créer une nouvelle Heroku App Cette opération est effectuée à l’étape 9 à l’aide de la ligne de commande. C’est très facile

1E. Ouvrez terminal et exécutez: node -v pour connaître la node version actuelle du node version vous utilisez (par exemple, vous obtenez la v6.9.1 ). À l’étape 2D, vous devrez vous assurer que la version à partir de là correspond à cette sortie.

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

2.comments:

-Assume que le projet Xcode habite sur le bureau dans un dossier nommé sneakerSearchFolder

-Inside terminal vous cd dans le dossier sneakerSearchFolder- c’est-à-dire, exécutez: cd Desktop/sneakerSearchFolder

-Une fois dans le sneakerSearchFolder, vous clonez le repository the github repo à l’ adresse https://github.com/firebase/flashlight

Important Vous devez ensuite aller dans le dossier flashlight , c.-à-d. Exécuter: cd flashlight

-Vous aurez besoin de la node version vous utilisez en fonction de https://devcenter.heroku.com/articles/deploying-nodejs

-run: node -v pour obtenir la node version cours d’exécution dans le dossier v6.9.1 (à savoir v6.9.1 ) ultérieurement lorsque vous créez une Heroku instance vous en aurez besoin conformément au lien devcenter.heroku ci-dessus.

-Maintenant que votre intérieur du dossier de la flashlight , si la node version du node version vous venez d’exécuter ne correspond pas à la version de l’étape 1E, vous devrez mettre à jour la version du dossier de la lampe de poche pour qu’ils correspondent. Mise à niveau de Node.js vers la dernière version Si les deux versions correspondent, vous n’avez pas à vous soucier de cela.

-En supposant que vos versions de nœud correspondent, ouvrez le fichier package.json dans votre dossier flashlight et ajoutez un object "engines" avec la valeur de la clé correspondant à la node version vous utilisez actuellement.

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

2.directions:

2A. dans le terminal, accédez au dossier de votre projet Xcode

2B. exécuter: git clone https://github.com/firebase/flashlight

2C. run: cd flashlight

2D. exécuter: node -v

2E. Ouvrez le dossier flashlight puis ouvrez package.json . Ajoutez ce qui suit au fichier.

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

2E-exemple. FYI voici un exemple. Ouvrez package.json et après l’ closing brace "dependencies" , ajoutez-le ici. ASSUREZ-VOUS D’AJOUTER UN COMMA après l’accolade de fermeture. Et n’ajoutez pas le “v” avant le numéro de version. Enregistrez le fichier.

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

3 • installation par npm

A partir de là, il est très important que votre dossier se trouve dans votre flashlight et non le dossier de votre projet principal pour que tout fonctionne, sinon vous obtiendrez des erreurs.

3.comments:

-Vous devriez toujours être dans votre dossier de flashlight

-Connectez-vous à Firebase , dans la console de votre projet FB, accédez à Project's Settings (icône en forme de petit rond à côté de Overview ), dans Paramètres du projet, choisissez SERVICE ACCOUNTS , accédez à la section Firebase Admin SDK . Il y a 2 choses que vous devez faire ici. 1. Recherchez et copiez votre Firebase service account . Il ressemble à firebase-admin-81772@sneakersearch-az12.iam.gserviceaccount.com et 2. au bas de la page, vous devrez cliquer sur le bouton Generate New Private Key . téléchargera un Unknown file que vous devrez renommer en service-account.json . S’il nomme le fichier, il suffit de renommer le fichier en service-account.json . Après avoir renommé le fichier, faites-le glisser dans votre dossier FB_SERVICEACCOUNT car l’étape 4B FB_SERVICEACCOUNT devra accéder à ce fichier à partir de cet FB_SERVICEACCOUNT . ASSUREZ-VOUS DE METTRE LE FICHIER DANS LE FLASHLIGHT FOLDER DE LA FLASHLIGHT FOLDER DE FLASHLIGHT FOLDER !

-Ce n’est pas répertorié dans les étapes de github mais c’est nécessaire. Vous devez append des Firebase Server SDK Credentials d’ Firebase Server SDK Credentials à votre projet.

-Vous devrez être dans votre dossier flashlight pour exécuter la commande $ npm install firebase-admin --save ou vous obtiendrez des erreurs car il recherchera un fichier packae.json . Le fichier se trouve déjà dans votre dossier flashlight et non dans le dossier de votre projet Xcode principal.

-Suivez les instructions à partir de https://firebase.google.com/docs/server/setup , dans la section Initialize the SDK . Vous aurez besoin de 2 des valeurs du fichier Unknown (qui doit maintenant être renommé service-account.json ) pour l’initialiser. Les valeurs sont sur les lignes 5- private_key et 6- clientEmail . FYI le clientEmail et le Firebase service account sont la même chose

-Voici ce que vous initializing dans le SDK :

 var admin = require("firebase-admin"); //this imports the npm firebase-admin module you just installed admin.initializeApp({ credential: admin.credential.cert({ projectId: "", //projectId: is the PROJECT_ID from your GoogleService-Info.plist file clientEmail: "foo@.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\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://.firebaseio.com" //databaseURL: is the DATABASE_URL from your GoogleService-Info.plist file }); 

-FYI dans la section Initialize the SDK , vous avez également la possibilité d’utiliser la partie supérieure où il est indiqué path/to/serviceAccountKey.json . Vous pouvez également indiquer le chemin d’access au fichier inconnu renommé. J’ai choisi la partie inférieure en inline car c’était plus facile. Si vous suivez ces étapes, vous n’avez pas besoin de vous en préoccuper.

app.js dossier app.js , un fichier app.js , copiez et collez le code ci-dessus et placez-le en haut du fichier.

-Back à l’intérieur du terminal sur la ligne de commande, exécutez: npm install

-Si tout va bien, les seuls avertissements que vous devriez avoir sont No repository field et No license field

3.directions:

3A . Assurez-vous que le dossier de la flashlight dans le dossier:

3B. Connectez-vous à la page SERVICE ACCOUNTS votre Firebase Console et cliquez sur le bouton Generate New Private Key pour télécharger un fichier Unknown .

3C. Renommez le fichier Unknown en service-account.json et placez-le dans votre dossier flashlight

3D. Dans le fichier service-account.json , copiez la key nommée client_email ou copiez les informations du compte de service sur votre page Firebase SERVICE ACCOUNTS .

3E. npm install firebase-admin --save terminal intérieur: npm install firebase-admin --save

3F. Copiez le contenu de la section Initialize the SDK et initialiser les champs avec les valeurs suivantes:

 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. Dans le dossier flashlight , ouvrez le fichier app.js , collez / enregistrez le code ci-dessus à l’intérieur avec les valeurs correctes.

3H. run: npm install

4 • éditez le fichier config.js (voir les commentaires en haut, vous devez définir FB_URL et FB_SERVICEACCOUNT au minimum)

4.comments:

-Dans votre dossier flashlight se trouve un fichier nommé config.example.js , ouvrez-le

– À l’intérieur de ce fichier config.example.js , vous trouverez les variables FB_URL et FB_SERVICEACCOUNT (elles sont répertoriées aux lignes 13 et 23).

-Vous devez modifier exports.FB_URL = process.env.FB_URL || 'https://.firebaseio.com'; exports.FB_URL = process.env.FB_URL || 'https://.firebaseio.com'; vers exports.FB_URL = process.env.FB_URL || 'whatever_your_DATABASE_URL_is'; exports.FB_URL = process.env.FB_URL || 'whatever_your_DATABASE_URL_is'; (assurez-vous de mettre whatever_your_DATABASE_URL_is que_votre_DATABASE_URL_is entre guillemets simples ou doubles)

-on ligne 23 exports.FB_SERVICEACCOUNT = process.env.FB_ACC || 'service-account.json'; exports.FB_SERVICEACCOUNT = process.env.FB_ACC || 'service-account.json'; est ce qui est utilisé pour accéder au service-account.json file à l’étape 3C (il n’est pas nécessaire d’append ou de modifier quoi que ce soit ici car il y accédera seul)

-Vous devez maintenant configurer le chemin où se trouvent vos données (comme le chemin de recherche utilisé pour envoyer les données au FB à l’intérieur du ViewController ci-dessus), l’index (Étape 17) et le type (similaire à votre modèle de données) que vous souhaitez surveiller sur les lignes 64,65 et 66

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

path est l’endroit où se trouvent vos data à l’intérieur du FB . C’est là que vous voulez extraire les résultats de la recherche, par exemple /searchSnkPath

index exp à l’étape 17

type exp à l’ étape 19

-FYI les lignes 69 à 79 établiraient un autre chemin que vous voudriez surveiller. Vous pouvez les supprimer ou les commenter si vous le souhaitez. Vous pouvez également créer plus de chemins à surveiller, par exemple, si vous aviez un chemin /searchClothingPath vous devriez également configurer la recherche à cet /searchClothingPath . Vous pouvez également append d’autres chemins si vous voulez, par exemple:

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

-Les Fields FYI sont les keys qui seront indexées dans ES. C’est une chose facultative à append. Si vous aviez 10 keys et que vous vouliez seulement que 2 d’entre elles soient indexed vous appendiez ceci. Cela signifie que sur les 10 touches seules ces 2 keys seraient consultables. Vous pouvez également utiliser la fonction d’parsing du fichier config.js pour faire la même chose.

-Après, sauvegardez / fermez le config.example.js et renommez-le config.js

4.directions:

4A. Ouvrez le fichier config.example.js et, à la ligne 13, modifiez exports.FB_URL = process.env.FB_URL || 'https://.firebaseio.com'; exports.FB_URL = process.env.FB_URL || 'https://.firebaseio.com'; vers exports.FB_URL = process.env.FB_URL || 'https://sneakersearch-az12.firebaseio.com'; exports.FB_URL = process.env.FB_URL || 'https://sneakersearch-az12.firebaseio.com';

4B. La ligne 23 indique ce qui est utilisé pour accéder au fichier service-account.json (tant que vous avez renommé le Unknown file à l’étape 3C, passez à autre chose).

4C. Les lignes 64, 65, 66, sont ce que je veux surveiller et sur la ligne 67, j’ai ajouté les fields key pour les deux Firebase Database Keys je souhaite effectuer une recherche, même si ce n’est pas nécessaire.

 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. Enregistrez / fermez le fichier config.example.js . Maintenant, renommez le fichier config.js .

5 • noeud app.js (exécuter l’application)

5.comments:

-Vous ne lancerez cette commande que jusqu’à la fin, sautez-la pour l’instant, mais vous devez savoir quelque chose. L’exécution du node app.js exécute votre application Heroku sur votre node app.js local. ElasticSearch recherchera localement ce que vous n’avez pas et vous obtiendrez des erreurs de connexion. Si vous souhaitez l’exécuter localement, vous devrez exécuter le export BONSAI_URL="" à l’étape 12B-Facultatif, qui est nécessaire pour résoudre les erreurs de connexion locale. Si votre application s’endort / se bloque (exp à la fin), vous devrez exécuter à nouveau la commande d’ export BONSAI_URL="" . Sinon, Heroku exécutera l’application automatiquement lorsque vous y appliquerez du code.

-À partir de maintenant, vous devez ouvrir votre fichier app.js et, conformément à https://docs.bonsai.io/docs/nodejs, append du code. Vous devez append le code n’importe où après la déclaration 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'); } } ); 

-Les instructions indiquent également qu’il faut exécuter $ export BONSAI_URL="https://username:password@my-awesome-cluster-123.us-east-1.bonsai.io" (en d’autres termes, export BONSAI_URL="" ), ce que vous feriez UNIQUEMENT si vous souhaitez exécuter votre application localement pour utiliser ES. Ce n’est pas fait pour la télécommande

5.directions:

5. Ouvrez le fichier app.js , ajoutez le code ci-dessous et enregistrez le fichier:

 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:

-Skip cette étape car à ce stade vous n’avez pas d’ ES local sur votre cpu pour indexer

6.directions:

6. PASSER CETTE ÉTAPE

7 • lampe de poche cd

7.comments:

-Pas besoin d’exécuter cela, vous devriez toujours être dans votre dossier flashlight

7.directions:

7. PASSER CETTE ÉTAPE

8 • connexion heroku

8.comments:

– Terminal ouvert

-Vous devrez entrer votre email address et votre password. Heroku password. Comme vous entrez le mot de passe, il apparaîtra vide

8.directions:

8A. lancer: heroku login

8B. A l’invite, entrez votre email address et votre password de password pour vous connecter à Heroku.

9 • heroku crée (ajoute heroku au projet)

9.comments:

C’est pourquoi vous n’avez pas besoin de créer une application heroku à l’étape 1D. Maintenant, vous allez créer et nommer votre application heroku

-Une fois que vous avez create vous devez saisir le nom de votre choix pour l’application heroku. c’est-à-dire que je choisis le nom sneakersearchinstanceAtoZ

-Après avoir exécuté cette commande si vous vous connectez à Heroku et que le nom de l’application devrait apparaître. Allez dans le coin droit, cliquez sur les 9 dots , choisissez Dashboard

9.directions:

9. exécuter: heroku create sneakersearchinstanceAtoZ

10 • additifs heroku: append des bonsaïs (installer des bonsaïs)

10.comments:

-Vous devrez append une credit card à votre compte Heroku avant d’exécuter cette étape, sinon, vous devrez le faire après l’avoir exécutée. C’est quand même un plan gratuit. Je ne sais pas si vous pouvez append un Bonsai add on sans carte

-Pour append une carte de crédit, allez tout à fait à droite, cliquez sur l’icône circulaire, choisissez Account Settings , puis choisissez Billing

-Vous devez maintenant append des bonsai à votre heroku app . Vous faites cela en exécutant les heroku addons:add bonsai --app

est le heroku application heroku que vous avez créé à l’étape 9

-après avoir créé un bonsai cluster il vous demandera ensuite de l’ouvrir en exécutant les heroku addons:open bonsai

10. directions:

10A. connectez-vous à Heroku et ajoutez une carte de crédit à la Billing Page

10B. run: heroku addons:add bonsai --app sneakersearchinstanceAtoZ // même nom exact depuis l’étape 9

10C. exécuter des heroku addons:open bonsai

11 • heroku config (vérifiez les informations d’instance de bonsaï et copiez votre nouveau BONSAI_URL, vous en aurez besoin plus tard)

11.comments:

-L’exécution de heroku config aura toutes vos environment variables et leurs valeurs correspondantes. Lorsque vous voyez bonsai's url votre bonsai's url , copiez sa valeur, vous en aurez besoin pour les étapes 12B et 17.

-Il s’agit exactement de l’URL que vous verrez à l’étape 10C

-L’URL de bonsai url pourrait ressembler à quelque chose comme https://abc123a01:01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net

11.directions:

11A. exécuter: heroku config

11B. Copiez l’ bonsai url qui est retourné

12 • config heroku: set FB_NAME = FB_TOKEN = “” (déclarer les variables d’environnement)

12.comments:

-12A est OBLIGATOIRE. Vous devez utiliser le nom GoogleService-Info.plist de GoogleService-Info.plist votre projet, qui est le FB_NAME et le API_KEY le FB_TOKEN pour cette étape.

-12B est facultatif. Si vous souhaitez vous connecter à ElasticSearch exécutez-le localement. Vous devrez définir votre bonsai url afin que l’exécution du node app.js ne node app.js pas d’erreurs de connexion. Pour ce faire, exécutez: export BONSAI_URL="" . Vous devrez exécuter cette commande par session de terminal ou si votre application Heroku s’endort / se bloque.

-Ne pas utiliser d’espaces avant ou après le signe égal

12.directions:

12A (OBLIGATOIRE). run: heroku config:set FB_NAME=sneakersearch-az12 FB_TOKEN=0012abc789xyz00019

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

13 • git add config.js (mise à jour)

13.comments:

-Si vous exécutez ceci, vous risquez d’obtenir une erreur disant: Les chemins suivants sont ignorés par l’un de vos fichiers .gitignore: config.js Utilisez -f si vous voulez vraiment les append.

-Il dit de lancer git add config.js puis ajoutez -f à la fin

13.directions:

13A. lancer: git add config.js

13B. En cas d’erreur, exécutez la commande suivante: git add config.js -f

14 • git commit -m “configurer bonsaï”

14.directions:

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

15 • git push maître heroku (déployer à heroku)

15.directions:

15. run: git push heroku master

16 • heroku ps: balance scale = 1 (commence le dyno worker)

16.comments:

-la réponse à ce que cette commande fait est ici Quelqu’un peut-il expliquer “heroku ps: scale web = 1”

16.directions:

16. run: heroku ps:scale worker=1

17 • curl -X POST / firebase (ex: https: // nom d’utilisateur: password@yourbonsai.bonsai.io/firebase )

17.comments:

Avant de commencer, lisez la réponse @DoesData mise à jour (sous mines) pour utiliser curl -X PUT à la place.

– Saisissez l’ bonsai url vous avez copiée à l’étape 11B.

– Collez l’URL après la commande curl -X POST et assurez-vous d’append /firebase à la fin.

Cela crée un index nommé /firebase qui pointe vers votre bonsai url . Ouvrez votre fichier config.js et recherchez exports.paths (ligne 62). Cela a une paire clé / valeur nommée index: "firebase" (ligne 65), la valeur pointe vers l’index que vous venez de créer et accède au cluster ES à partir de là.

-Basiquement dans votre fichier config.js, à la ligne 65, la valeur d’ index firebase doit correspondre exactement au nom /firebase que vous ajoutez à la fin de la commande curl -X POST . Si les noms ne correspondent pas, rien de cela ne fonctionnera.

-Si vous réussissez, vous devriez recevoir cette réponse: {"acknowledged":true}

17.directions:

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

18 • Il est maintenant temps d’utiliser le noeud app.js de l’étape 5 (exécuter l’application)

18.comments:

L’exécution de cette commande démarrera l’application localement. Vous pouvez également exécuter npm start mais de toute façon, il sera lancé sur votre ordinateur local et vous devrez exécuter le code à l’étape 12B (facultatif) pour que cela fonctionne.

18.directions

18. exécuter: node app.js

19 • définir votre ou vos objects de mappage

FYI Step 19 est très important. Vous DEVEZ définir votre object MAPPINGS et ses clés. Je n’ai pas assez de caractères pour l’expliquer en détail ici. C’est ce que la clé de type étape 4 utilise pour se définir. Regardez cette vidéo pour expliquer comment définir votre mappings object : https://www.youtube.com/watch?v=h3i3pqwjtjA&feature=youtu.be

19.directions:

19A. –Ouvrez TextEdit ou Sublime puis créez un fichier et nommez-le sneakerfile.json . Enregistrez-le et faites glisser le fichier dans votre dossier flashlight . Vous avez besoin de l’extension .json .

19B. -Dans ce fichier, ajoutez le code suivant, enregistrez et fermez le fichier:

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

19 e s. récupérez votre heroku config:get BONSAI_URL . Mon BONSAI_URL est https: // abc123a01: 01abc12de45xyz34@xyz-012345.us-east-1.bonsaisearch.net

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

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

Fait avec la partie 1. La partie 2 expliquera l’étape 19 en détail

Plus d’infos-

Commandes Heroku:

Pour vérifier votre dyno

exécuter: heroku ps

Si vous obtenez ce qui suit, référez-vous aux liens ci-dessous

 === 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) 

Après avoir créé votre Heroku app votre dyno est soumis au plan Heroku Free Plan . Il finira par fall asleep / se crash s’il n’est pas utilisé dans un certain délai. Pour arrêter de dormir / s’écraser suivre

Un moyen facile d’empêcher Heroku de tourner au ralenti?

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

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

Autres commandes:

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

Pour revenir à l’ command prompt appuyez sur Ctrl+C

Vous pouvez également contacter le support Heroku ou le support Bonsai car ils sont très utiles.

Je posterai la partie 2 très bientôt.

La réponse ci-dessus est géniale. Cependant, il y a beaucoup trop de commentaires pour que ma mise à jour y soit utile, alors je la place ici.

Si vous suivez les étapes ci-dessus, vous rencontrerez une erreur à l’étape suivante:

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

Les nouvelles versions deasticSearch ne vous permettent plus de créer un nouvel index à l’aide de POST, mais vous pouvez utiliser PUT. Donc tu veux courir

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

et la réponse doit être: {"acknowledged":true,"shards_acknowledged":true}

Voir cette question pour plus d’informations.

Mettre à jour

J’ai également basculé sur Algolia car la documentation était beaucoup plus claire. Cependant, je dirais que la documentation de recherche élastique a un besoin urgent de mise à jour. Je recommanderais à ceux qui s’intéressent à la recherche élastique d’essayer de déployer leur code en utilisant les fonctions cloud de Firebase plutôt que Heroku. Je n’ai pas réussi à trouver de guide pour cela, mais le code de node.js devrait être similaire, à la différence qu’il sera déployé sur le cloud Firebase au lieu de Heroku. Cela devrait rendre le processus beaucoup plus simple. Vous pouvez consulter les fonctions cloud de Firebase ici