Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用browserify rails时资产编译失败_Javascript_Ruby On Rails_Ruby_Node.js_Heroku - Fatal编程技术网

Javascript 尝试使用browserify rails时资产编译失败

Javascript 尝试使用browserify rails时资产编译失败,javascript,ruby-on-rails,ruby,node.js,heroku,Javascript,Ruby On Rails,Ruby,Node.js,Heroku,我正在从事一个RubyonRails4.x项目,我想使用browserifyRailsgem,以便在一些JavaScript文件中使用CommonJS。在开发过程中,这在本地非常有效,但是在Heroku上,资产编译失败了。第一个问题是Heroku Ruby buildpack在/app/bin中添加了节点0.4.7,这是路径环境变量中的第一个问题。这破坏了browserify。我改成了一个Ruby buildpack,但没有这样做,所以现在我的.buildpack文件如下所示: https://

我正在从事一个RubyonRails4.x项目,我想使用
browserifyRails
gem,以便在一些JavaScript文件中使用CommonJS。在开发过程中,这在本地非常有效,但是在Heroku上,资产编译失败了。第一个问题是Heroku Ruby buildpack在
/app/bin
中添加了节点0.4.7,这是
路径
环境变量中的第一个问题。这破坏了
browserify
。我改成了一个Ruby buildpack,但没有这样做,所以现在我的
.buildpack
文件如下所示:

https://github.com/PROJECT_NAME_HERE/heroku-buildpack-vendorbinaries.git
https://github.com/heroku/heroku-buildpack-nodejs
https://github.com/cymen/heroku-buildpack-ruby.git
尝试编译使用CommonJS
require
的JavaScript资产时出错(因此触发
browserify rails
):

因此,在RubyonRails构建步骤中,似乎无法访问节点二进制文件。这是因为节点位于Ruby buildpack的
路径设置不包括
/app/vendor/node/bin/node
的位置吗?我尝试将
postinstall
添加到
packages.json
中,如下所示:

...
"scripts": {
    "postinstall": "ln -s /app/vendor/node/bin/node /app/bin/node"
}
...

但那没用。接下来,我将尝试挖掘我分叉的ruby构建包,看看是否可以修改路径。但这是一个非常缓慢的过程,需要往返时间才能部署到Heroku,所以如果其他人知道问题出在哪里,我很想知道

所以答案是:

当Heroku像我们一样使用多构建包构建时,所有构建都发生在
/tmp
中的随机目录中,并且在整个构建完成之前,不会将任何内容放入常规目录中,如
/app
。我的问题的解决方案是:

  • 删除旧NodeJS 0.4.7二进制文件中的内部版本,或者使用已删除的构建包()
  • 编辑.buildpacks并确保在Ruby构建包之上有Heroku NodeJS构建包
  • 更新heroku buildpack ruby,以便它在slug编译期间使用更新路径,以包括heroku NodeJS buildpack在
    /tmp
    中创建的NodeJS目录
  • 为了让事情变得更简单,我已经分叉了
    mattworts
    Heroku Ruby buildpack,并添加了更新路径的代码:

    最终结果是,当在slug编译过程中发生资产兼容时,路径中现在有一个最新的NodeJS二进制文件,这样browserify rails就可以工作了!请注意,BrowserifyRails仍然相当粗糙,因此您可能需要对其进行自定义调整,以使其正常工作()


    另一种方法是使用stock Heroku Ruby buildpack,但遵循“黑客”下的指南使用自己版本的NodeJS:

    Heroku最新的Ruby buildpack(
    v113+
    )使用Node.js buildpack的
    节点
    二进制文件,因此,您只需要设置多个BuildPack,以访问最新的Ruby和Node.js BuildPack

    这是我的
    .buildpacks
    文件:
    
    https://github.com/heroku/heroku-buildpack-nodejs#v63
    https://github.com/heroku/heroku-buildpack-ruby#v129
    

    一切都会好起来的

    ...
    "scripts": {
        "postinstall": "ln -s /app/vendor/node/bin/node /app/bin/node"
    }
    ...