নোড অ্যাপ্লিকেশন চলাকালীন bcrypt অবৈধ এল্ফ শিরোনাম


87

আমি স্কুলের নোডেজ প্রকল্পে কাজ করছি। আমি এনপিএম দিয়ে বিসিআরপিট ইনস্টল করতে সক্ষম হইনি তাই আমি বিসিআরপিট-নোডেজ ইনস্টল করেছি এবং প্রকল্পটি গতকাল খুব ভাল কাজ করেছে। তবে আজ, যখন আমি একটি "নোড অ্যাপ" করি তখন আমার এই ত্রুটি রয়েছে:

/.../node_modules/bcrypt/node_modules/bindings/bindings.js:79
        throw e
              ^
Error: /.../node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at bindings (/.../node_modules/bcrypt/node_modules/bindings/bindings.js:74:15)
    at Object.<anonymous> (/.../node_modules/bcrypt/bcrypt.js:1:97)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)

আমার প্যাকেজ.জসন ফাইলটি দেখতে এমন দেখাচ্ছে:

{
  "name": "Supinfarm",
  "version": "0.0.0",
  "env": {
              "PYTHON": "/usr/bin/python2.6"
        },
  "dependencies": {
    "express": "3.1.0",
    "connect-flash": "*",
    "jade": "*",
    "stylus": "*",
    "passport": "*",
    "passport-local": "*",
    "mongoose": "*",
    "bcrypt": "*"
  }
}

আমি লিনাক্স উবুন্টু 10.04 এলটিএসে রয়েছি আমি সাফল্য ছাড়াই গুগলে কোনও সমাধান খোঁজার চেষ্টা করেছি ... কেউ আমাকে সাহায্য করতে পারে?


আপনি কি সমাধান খুঁজে পেয়েছেন?
মিঃ যোশিজি

হ্যাঁ, আমি উবুন্টু 12.04 ইনস্টল করেছি এবং আমি বিসিআরপিটি ইনস্টল করতে ও ব্যবহার করতে সক্ষম হয়েছি। আমার ইস্যুতে আপনার আগ্রহের জন্য ধন্যবাদ
ব্যবহারকারীর 24244469

উত্তর:


164

আমি খুঁজে পেয়েছি যে ওএসএক্স-এ সংকলিত বিক্রিপ্ট লিনাক্সে বেশ কার্যকরভাবে কাজ করবে না । অন্য কথায়, আপনি যদি নিজের স্থানীয় ওএসএক্স ওয়ার্কস্টেশনে সংকলিত বিক্রিপ্টটি পরীক্ষা করে দেখে থাকেন এবং আপনার লিনাক্স সার্ভারে নোড অ্যাপটি চালানোর চেষ্টা করেন, আপনি উপরের ত্রুটিটি দেখতে পাবেন।

সমাধান: npm install bcryptলিনাক্সে, এটি পরীক্ষা করে দেখুন, সমাধান করা হয়েছে।

সম্ভবত এর সাথে মোকাবিলা করার সর্বোত্তম উপায় হ'ল আপনার নোড_মডিউলগুলি .gitignore ... এবং এনপিএম রিমোট ইনস্টল করে বাদ দিন।


4
কারণ তারা বিভিন্ন অপারেটিং সিস্টেম এবং সম্ভবত সম্ভবত বিভিন্ন অন্তর্নিহিত প্রসেসরের আর্কিটেকচার। আমি যখন কলেজে ছিলাম তখন আমাদের দুটি ইউনিক্স ক্লাস্টার ছিল: একটি ভ্যাক্সের উপর চালাচ্ছিল, অন্যটি একটি আলফায়। সিএস প্রকল্পগুলি ভ্যাক্সে সংকলন করতে হবে যেহেতু অধ্যাপক এটি ব্যবহার করেছিলেন ...
টেকন

@ টকোন শিওর, তবে এনপিএম মডিউলগুলি ক্রস-কম্পাইল করে: বাইনারি উপাদানগুলির সাথে সামমিং ইনস্টল করা আপনাকে একটি ম্যাচ (ওএস এক্স), ইএলএফ (লিনাক্স) এবং পিএক্সই (উইন্ডোজ) বাইনারি দেয়।
মাইকম্যাকানা

4
কেবল সমস্যাটি হ'ল: bcrypt, অন্যান্য নোড মডিউলগুলির বিপরীতে, কেবল একটি একক ওএস বাইনারি ইনস্টল করে। সুতরাং লিনাক্স-ইনস্টলড বিসিআরপিট করা আপনার ম্যাক বিকাশকারী সিস্টেমগুলিকে ভেঙে ফেলবে , যেহেতু নোড_মডিউলস / বিসিক্রিপ্ট / বিল্ড / রিলিজ / বিসিক্রিপ_লিব.নোড এখন লিনাক্স বাইনারি inary দৌড়ে file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.nodeপরীক্ষা দিতে।
মাইকম্যাকানা

@ মিকমেচানা তারা অবশ্যই তা করে না। আমরা দেবের জন্য ভিএমওয়্যার এবং উবুন্টু ব্যবহার করি তবে আমাদের ম্যাক্সের সাথে ভাগ করি। সকেট.ইও, লেভেল্ডবি, ফ্যান্টমস, ইত্যাদি সমস্ত আপনি যে টার্গেট আর্কিটেকচারটি ইনস্টল করছেন তার জন্য সংকলন করে। যদি আমি আমার ম্যাকের স্তরটি ইনস্টল করি এবং ভিএম থেকে এটি ব্যবহার করার চেষ্টা করি তবে এটি সম্পূর্ণরূপে ব্যর্থ হয় যেহেতু এটি ডারউইনের জন্য সংকলিত হয়েছে লিনাক্সের জন্য নয়।
টেকন

4
@mikemaccana নোড-Sass শুধুমাত্র কারণ (readme.md থেকে) কাজ করে: Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:। এটি ক্রস-সংকলন নয়, বরং আপনাকে প্রাক-সংকলিত বাইনারি দিচ্ছে। নোড-জিপ ডিফল্টরূপে ক্রস-সংকলন করে না।
tkone

15

আপনি যদি আমি যেমন কোনও ডকারের ধারকের ভিতরে দৌড়াতে থাকেন তবে আপনার কেবলমাত্র একটি নোড_মডিউলগুলি এতে নির্দিষ্ট করা আছে।

কিছু গ্রন্থাগার হোস্ট মেশিনে সংকলন করা দরকার এবং তাই আপনার মডিউলগুলি বাসি হতে পারে।


4
এটা আমার সমস্যা ছিল। বিসিআরপিট ম্যাকস এক্স এ নির্মিত হয়েছিল তবে এটি একটি লিনাক্স ধারক মধ্যে চালিত হয়েছিল।
নেট রিড

8

আমার সমস্যাটি আমার ডকার-কমপোজ.আইএমএল ফাইলের সাথে ছিল, আমার .dockerignore এ আমার ইতিমধ্যে নোড_মডিউল ছিল তবে আমার নোড_মডিউল ডিরেক্টরিটি একটি ভলিউম হিসাবে যুক্ত করার দরকার ছিল:

volumes:
  - ./:/usr/src/app
  - /usr/src/app/node_modules


6

আমিও একই সমস্যার মুখোমুখি ছিলাম bcrypt v.1.0.3 নিয়ে। সবেমাত্র সর্বশেষতম সংস্করণে (3.0.0) আপডেট হয়েছে এবং এটি এখন কাজ করছে

চালান

npm install bcrypt@latest --save

এটি সমস্যার সমাধান করেছে, আপনাকে ধন্যবাদ, (আমি ম্যাকস-এ প্রোগ্রাম করছি এবং এটি উবুন্টু সার্ভারে স্থাপন করছি!)
মুরঙ্গা রডরিগো

4
এটি আমার জন্য ম্যাকোজে (আমি v3.0.4 ব্যবহার করছি) কাজ করে না
জর্ডিনস

এটি আমার জন্য কাজ করে না এবং আমি MacOS এর মধ্যে v5.0.0 ব্যবহার করছি
therightstuff

1

প্রথমে নিশ্চিত হয়ে নিন যে আপনি নোড মডিউলগুলি আপলোড করছেন না এবং আপনার লিনাক্স মেশিনে নিজেই এনপিএম ইনস্টল চালাচ্ছেন কারণ আপনার ব্যবহার করা প্ল্যাটফর্মের উপর নির্ভর করে বিসিক্রিপ্ট ইন্সটলেশন পরিবর্তন হতে পারে। আপনি নীচের অন্যান্য প্ল্যাটফর্মগুলির জন্য অন্য ইনস্টলেশন নির্দেশাবলী দেখতে পারেন।
https://github.com/kelektiv/node.bcrypt.js/wiki/ ইন্সটলেশন- নির্দেশনা

আপনার যদি আরও সমস্যা হয় তবে এটি নোড-প্রি-জিপ সম্পর্কিত হতে পারে। Bcrypt এর একটি নির্ভরতা।

এডাব্লুএস ইলাস্টিক বিয়ানস্টালকের জন্য নোড 8.x চলমান ইলাস্টিক বিয়ানস্টালকের মোতায়েনের সময়, নোড-জিপ টিএমপি ডিরেক্টরিতে লেখার জন্য পর্যাপ্ত অনুমতি পায় না। bcrypt ইনস্টল হবে না এবং অ্যাপ্লিকেশন মোতায়েন ব্যর্থ হবে।

আপনার প্রকল্পের মূলটিতে একটি .npmrc ফাইল যুক্ত করা একটি কর্মপরিকল্পনা যা নোড-জিপকে রুট হিসাবে চালাতে বাধ্য করবে এবং ইনস্টলেশনটি সম্পূর্ণ করার অনুমতি দেবে। .Npmrc এর জন্য ফাইল সামগ্রী:

# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6
unsafe-perm=true

আর একটি বিকল্প (সম্ভবত আরও সঠিক উপায়) হ'ল কোড সহ .ebextensions ফাইলটি তৈরি করা:

.ebextensions:00_change_npm_permissions.config:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/00_set_tmp_permissions.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      chown -R nodejs:nodejs /tmp/.npm

এটি আপনাকে নোড-জিপ চালানোর পর্যাপ্ত অ্যাক্সেস দেবে


1

একটি সহজ উপায় আছে যা আমাকে এই সমস্যাটি সমাধান করার অনুমতি দিয়েছে:

1. Bcrypt আনইনস্টল করুন

npm uninstall bcrypt

2.- আবার bcrypt ইনস্টল করুন

 npm i bcrypt

ত্রুটি দেখা দেয় কারণ আপনি যখন সাইকেলটি ইনস্টল করেন, এনপিএম আপনার মেশিন এবং অপারেটিং সিস্টেমের জন্য প্রস্তাবিত সংস্করণ ইনস্টল করে তবে আপনি যখন অন্য মেশিনে থাকবেন তখন এটি কাজ করে না


0

এইডাব্লুএস ইলাস্টিক বিনস্টাল্কে অ্যাপ স্থাপন করা এবং সার্ভারে বিক্রিপ্ট ইনস্টল করার জন্য, পোস্ট পোস্ট হুক ইন অন্তর্ভুক্ত করুন .ebextensions/01_build.config:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      cd /var/app/current/
      rm -rf node_modules/bcrypt
      sudo /opt/elasticbeanstalk/node-install/node-v10.13.0-linux-x64/bin/npm install bcrypt@latest

0

আমি জানি যে এটি কিছুটা ঝামেলা হতে পারে তবে এটি একটি সমাধান। ব্র্যাকিপ্ট বাস্তবায়নের জন্য আমি যা করেছি তা কি আমি ক্লাউড 9 উদাহরণটি শুরু করেছিলাম? আপনারা যারা জানেন না তাদের জন্য, ক্লাউড 9 একটি প্রাথমিক AWS আইডিই যা ইসি 2 ইভেন্টে চলে। ক্লাউড 9 থেকে আপনি আপনার কোডটি ল্যাম্বডা ফাংশন হিসাবে আদর্শ হিসাবে আপলোড করতে পারবেন। সুতরাং আমি ক্লাউড 9 এ ফাংশনটি লিখেছিলাম এবং আমি এটি আপলোড করার সময় কোডটি কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.