将Meteor应用程序从OS X部署到Linux会导致bcrypt问题

将Meteor应用程序从OS X部署到Linux会导致bcrypt问题,meteor,Meteor,我刚刚部署了我的第一个产品Meteor应用程序,但遇到了一个非常重要的问题。当我尝试运行我的应用程序时,出现以下错误: /home/hiapp/bundle/programs/server/node_modules/fibers/future.js:173 throw(ex); ^ Error: /home/hiapp/bundle/programs/server/npm/npm-bcry

我刚刚部署了我的第一个产品Meteor应用程序,但遇到了一个非常重要的问题。当我尝试运行我的应用程序时,出现以下错误:

/home/hiapp/bundle/programs/server/node_modules/fibers/future.js:173
                        throw(ex);
                              ^
Error: /home/hiapp/bundle/programs/server/npm/npm-bcrypt/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 (/home/hiapp/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/node_modules/bindings/bindings.js:74:15)
    at Object.<anonymous> (/home/hiapp/bundle/programs/server/npm/npm-bcrypt/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)
/home/hiapp/bundle/programs/server/node\u modules/fibers/future.js:173
投掷(ex);
^
错误:/home/hiapp/bundle/programs/server/npm/npm bcrypt/node_modules/bcrypt/build/Release/bcrypt_lib.node:ELF头无效
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:312:12)
at Module.require(Module.js:364:17)
根据需要(模块js:380:17)
在绑定时(/home/hiapp/bundle/programs/server/npm/npm bcrypt/node_modules/bcrypt/node_modules/bindings/bindings.js:74:15)
反对。(/home/hiapp/bundle/programs/server/npm/npm bcrypt/node_modules/bcrypt/bcrypt.js:1:97)
在模块处编译(Module.js:456:26)
在Object.Module.\u extensions..js(Module.js:474:10)
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:312:12)
通过一些研究,问题似乎在于bcrypt是特定于平台的,因为我的开发是在OS X 10.10上进行的,而我的生产服务器是在Ubuntu 14.04上,所以问题就存在了。我的工作是从programs/server文件夹运行
npm install bcrypt
,然后将其从
programs/server/node\u modules/bcrypt
复制到
programs/server/npm
。这似乎需要很多手动步骤

我正准备用一些补丁重新部署我的应用程序,我担心我将不得不再次执行相同的步骤。有没有更好的方法来部署Meteor应用程序,使您不会遇到此问题?我目前的程序是:

  • 运行meteor build
  • scp结果tarball到我的服务器(数字海洋)
  • 在我的应用程序用户主目录中分解tarball
  • 新增步骤:重新编译bcrypt并如上所述复制目录

  • 我猜想,当服务器第一次尝试加载新库时,自动刷新将被破坏,它将在火热的荣耀中爆炸。简单地在服务器上克隆GIT repo并直接从那里进行构建会更好吗,或者我可以使用
    mup
    或任何其他工具来帮助平滑部署过程吗?

    我遇到了完全相同的问题-我改为使用Meteor Up(mup),问题就消失了。更不用说它更直接了

    我在youtube上学习了本教程,其中介绍了如何使用MUP部署到Digital Ocean

    MUP的github页面特别提到它处理二进制NPM模块-


    希望对你有帮助

    我也遇到了同样的问题,并采取了以下措施来解决:

    • 卸载nodejs

      sudo apt get remove nodejs

    • 删除所有剩余文件

      rm-rf~/.nvm~/.npm

      sudo rm-rf/usr/bin/node/opt/nodejs/usr/lib/node_模块/usr/local/lib/node_模块

    • 从mup.json中的默认设置升级节点版本

      “节点翻转”:“0.10.33”,

    • 运行mup设置并部署

      mup设置

      mup部署


      • 有两种方法可以解决这个耗时的问题,这完全取决于部署方式

        手动部署 如果您手动部署应用程序,请确保您使用的是节点v0.10.361,并且仅此而已。Meteor无法与节点v0.12.x一起正常工作。更具体地说,光纤模块会导致很多问题,它会因各种错误而阻塞2

        以下是修复me3、4的步骤:

      • npm
        目录中删除bcrypt模块:

        $ cd path_to_your_app/bundle/programs/server
        $ rm -rf npm/npm-bcrypt/node_modules/bcrypt/
        
        $ cp -r node_modules/bcrypt npm/npm-bcrypt/node_modules/bcrypt
        
      • 首先将bcrypt模块安装到
        节点\u modules
        目录中。这将针对服务器的操作系统构建bcrypt:

        $ npm install bcrypt
        
      • 将新创建的bcrypt模块移动到
        npm
        目录中:

        $ cd path_to_your_app/bundle/programs/server
        $ rm -rf npm/npm-bcrypt/node_modules/bcrypt/
        
        $ cp -r node_modules/bcrypt npm/npm-bcrypt/node_modules/bcrypt
        
      • 最后,通过upstart重新启动应用程序、mogodb和任何web服务器进程,如nginx6(如果已配置)。如果上面列出的步骤没有为您解决问题,您可以在下面的标题理智步骤下执行

      • 使用Meteor Up(mup) 如果您使用的是mup,那么这个过程就容易多了,正如本线程中的其他答案所指出的那样。但是,在某些情况下仍然会出现错误,包括
        无效ELF头
        错误。确保您拥有最新版本的mup
        npm update mup-g

      • 第一步是删除任何预先存在的app和nodejs包。Mup将应用程序安装到
        /opt/
        中,您可以在其中找到
        您的应用程序
        节点
        。移除它们

      • 验证
        mup.json
        文件中是否有正确的节点版本(仅0.10.36)1和以下设置:

        {
        
         ...
        
          "setupMongo": true,
          "setupNode": true,
          "nodeVersion" : "0.10.36",
          "setupPhantom": true,
          "enableUploadProgressBar": true,
        
          // Application name (No spaces)
          "appName": "your_app",
        
          // Location of app (local directory)
          "app": ".",
        
         ...
        
        }
        
      • 运行:

        $ mup setup
        $ mup deploy
        
      • 导航到服务器上的
        服务器
        文件夹并重建模块:

        $ cd /opt/your_app/app/programs/server
        $ npm rebuild
        $ npm install
        
        可选:
        $sudo npm更新节点gyp-g

      • 最后,重新启动应用程序、mogodb和任何web服务器进程,如nginx6。完成上述步骤后,您可能需要查看下面的健全步骤,以了解更多调试选项



      • 健全步骤 您还可以执行其他几个步骤:

        • 请注意,apache还可以将自身绑定到运行nginx的同一端口。查看应用程序的错误日志和web服务器的错误日志,查看是否存在任何问题。通过
          sudo服务apache2停止apache或(不推荐)端口80上任何正在运行的进程

          • 然后删除或移动apache2 conf文件以防止其再次启动。所有conf文件都位于
            /etc/init
            /etc/init.d