2016-12-23 1 views
0

J'ai précédemment déployé une application Java avec succès dans Cloud Foundry. Cependant, maintenant les développeurs ont ajouté une bibliothèque partagée compilée à partir de C. J'ai ajouté le .so au fichier .zip (j'utilise le packager universel et le déploie dans Cloud Foundry par fichier zip) et je m'assure que le .so est exécutable. Cependant, quand je je reçois une déployer erreur:Comment regrouper une bibliothèque partagée C personnalisée avec une application Java dans Cloud Foundry?

2016-12-23T14:39:01.013+00:00 [STG/0] [OUT] -----> Java Buildpack Version: eba4df6 | git://github.com/cloudfoundry/java-buildpack.git#eba4df6 
2016-12-23T14:39:01.017+00:00 [STG/0] [ERR] [Buildpack] ERROR Compile failed with exception #<RuntimeError: No container can run this application. Please ensure that you’ve pushed a valid JVM artifact or artifacts using the -p command line argument or path manifest entry. Information about valid JVM artifacts can be found at https://github.com/cloudfoundry/java-buildpack#additional-documentation. 
2016-12-23T14:39:01.017+00:00 [STG/0] [ERR] No container can run this application. Please ensure that you’ve pushed a valid JVM artifact or artifacts using the -p command line argument or path manifest entry. Information about valid JVM artifacts can be found at https://github.com/cloudfoundry/java-buildpack#additional-documentation. 
2016-12-23T14:39:01.022+00:00 [STG/0] [ERR] Failed to compile droplet 
2016-12-23T14:39:01.024+00:00 [STG/0] [OUT] Exit status 223 

Donc je crois comprendre que je dois créer une Buildpack personnalisée de Java Buildpack. Cependant, je suis coincé avec le se le code à ce stade: https://github.com/ONSdigital/java-buildpack/blob/master/bin/compile#L28

# Adding crf tagger library 
status "Adding crf tagger support" 
cp $bp_dir/parsers/src/main/resources/libbackend.so $build_dir/vendor/ 

# update the PATH 
status "Building runtime environment" 
mkdir -p $build_dir/.profile.d 
echo "export PATH=\"$HOME/bin:\$HOME/vendor/:\$PATH\";" > $build_dir/.profile.d/crftagger.sh 
echo "export LD_LIBRARY_PATH=\"\$HOME/vendor/\";" >> $build_dir/.profile.d/crftagger.sh 

De ce que je comprends, je ne besoin de modifier la scène compile. Que dois-je faire pour copier sur le .so et que le Buildpack fonctionne correctement.

Répondre

1

S'il vous plaît jeter un oeil à cette https://docs.cloudfoundry.org/devguide/deploy-apps/deploy-app.html#profile

crochets pré-exécution que vous avez besoin est. Je ne peux pas vous donner plus de détails car vous n'avez pas fourni suffisamment d'informations (structure du projet, avez-vous .profile dans votre racine et etc.).

Si vous avez besoin d'ajouter libs partagées essayer d'utiliser attr_reader :additional_librarieshttps://github.com/cloudfoundry/java-buildpack/blob/master/docs/extending-droplet.md

+1

Merci. Cela serait utile si je téléchargeais l'objet partagé à partir d'un autre emplacement, puis l'ajoutais au chemin. Cependant, existe-t-il une solution où je peux regrouper l'objet partagé dans le Fat Zip et le déployer dans une fonderie de nuages. Juste je dois déployer à une instance de nuage et une instance interne qui est derrière un mur à l'épreuve du feu ainsi j'aurais besoin de deux solutions si employant la méthode de 'profil'. – albal

+0

Mon application a été déployée et exécutée en utilisant des commandes dans un script bash «.profile». – albal