【发布时间】:2014-05-17 09:46:02
【问题描述】:
我正在开发一个 Ruby on Rails 4.x 项目,我想使用 browserify-rails gem,以便可以在我的一些 JavaScript 文件中使用 CommonJS。这在开发过程中在本地运行良好,但是在 Heroku 上资产编译失败。第一个问题是 Heroku Ruby buildpack 将节点 0.4.7 添加到 /app/bin 并且它首先在 PATH 环境变量中。那打破了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):
rake aborted!
Error while running `/tmp/build_a95a51d0-fdb1-4035-ad56-97c40f738540/node_modules/.bin/browserify --list`:
/usr/bin/env: node: No such file or directory
(in /tmp/build_a95a51d0-fdb1-4035-ad56-97c40f738540/app/assets/javascripts/designer.js)/tmp/build_a95a51d0-fdb1-4035-ad56-97c40f738540/vendor/bundle/ruby/2.0.0/bundler/gems/browserify-rails-f3df1d20b466/lib/browserify-rails/browserify_processor.rb:92:in `run_browserify'
/tmp/build_a95a51d0-fdb1-4035-ad56-97c40f738540/vendor/bundle/ruby/2.0.0/bundler/gems/browserify-rails-f3df1d20b466/lib/browserify-rails/browserify_processor.rb:40:in `dependencies'
/tmp/build_a95a51d0-fdb1-4035-ad56-97c40f738540/vendor/bundle/ruby/2.0.0/bundler/gems/browserify-rails-f3df1d20b466/lib/browserify-rails/browserify_processor.rb:33:in `asset_dependencies'
/tmp/build_a95a51d0-fdb1-4035-ad56-97c40f738540/vendor/bundle/ruby/2.0.0/bundler/gems/browserify-rails-f3df1d20b466/lib/browserify-rails/browserify_processor.rb:13:in `evaluate'
...
因此,在 Ruby on Rails 构建步骤期间似乎无法访问节点二进制文件。这是因为节点位于 Ruby buildpack 的 PATH 设置不包括 /app/vendor/node/bin/node 的位置吗?我尝试将postinstall 添加到packages.json,如下所示:
...
"scripts": {
"postinstall": "ln -s /app/vendor/node/bin/node /app/bin/node"
}
...
但这并没有帮助。接下来,我将尝试深入研究我 fork 的 ruby buildpack,看看我是否可以修改路径。但这是一个非常缓慢的过程,需要往返时间来部署到 Heroku,所以如果其他人知道出了什么问题,我很想知道!
【问题讨论】:
标签: javascript ruby-on-rails ruby node.js heroku