我可以在 Heroku 中运行咖啡脚本吗?
Posted
技术标签:
【中文标题】我可以在 Heroku 中运行咖啡脚本吗?【英文标题】:Can I run coffeescript in Heroku? 【发布时间】:2011-09-15 10:09:30 【问题描述】:我有一个用 CoffeeScript 编写的 node.js 应用程序。
我想知道在 Heroku 上托管应用需要什么。
谢谢
【问题讨论】:
据我所知,heroku 只托管 ruby 应用程序。 他们最近添加了它。请注意,如果您想在 Heroku 上的 Rails 应用程序中运行 CoffeeScript,只需将最新的therubyracer
添加到您的 Gemfile 即可。
我建议你接受 florian.k 的回答,它比目前接受的要简单得多。
你不应该在coffeescript中开发并在编译好的JS中部署吗?如果 heroku 的编译器版本与您的开发机器上的不同怎么办。考虑将编译步骤推送到生产服务器会出现什么问题,这将是一场噩梦。
【参考方案1】:
Michael Blume 是对的,您不需要任何额外的代码即可在 heroku 上运行 CoffeeScript 节点应用程序。我就是这样做的:
将当前版本中的coffee-script
添加到package.json
中的依赖项中。这可能看起来像这样:
"name": "My-CoffeeScript-App-on-Heroku",
"version": "0.0.1",
"dependencies":
"coffee-script": "1.1.2"
然后修改Procfile
中您的节点应用程序的条目以使用咖啡而不是节点。对于只有一个 Web 条目的应用程序,这可能看起来像这样
web: coffee app.coffee
要测试这是否适用于 Heroku,您可以使用 foreman gem 在 localhost 上进行尝试:
$ gem install foreman
$ foreman start
21:13:36 web.1 | started with pid 4711
然后尝试推送到heroku,你会在依赖安装中看到类似这样的内容:
-----> Installing dependencies with npm 1.0.8
coffee-script@1.1.2 ./node_modules/coffee-script
jade@0.15.3 ./node_modules/jade
├── mkdirp@0.0.6
└── commander@0.1.0
不确定该过程是否存在问题,但上述方法对我来说似乎有点矫枉过正,因为您将代码弄乱了运行时环境的东西。
希望这对某人有帮助:)
【讨论】:
CoffeeScript 没有全局安装,所以你应该使用本地安装的。更新您的Procfile
,例如:web: node_modules/coffee-script/bin/coffee app.coffee
这是正确答案。我有一个 coffescript/nodejs 应用程序的示例,它可以完成所有这些并集成 nodemon 用于开发目的...github.com/lookfirst/convert
我最近再次验证了这一点,并希望与您分享示例代码:github.com/floriankrueger/heroku-on-coffee
这也适用于LiveScript
,只需将LiveScript
放入您的依赖项中,并在您的Procfile
中放入web: lsc app.ls
。
更短:web: node_modules/.bin/coffee app.coffee
【参考方案2】:
只需在我的依赖项中包含coffeescript,然后将'coffee index.coffee'放入我的Procfile中,我就能相处得很好
每次服务器启动时编译都会产生启动成本,但除此之外你应该没问题。
【讨论】:
【参考方案3】:我通过在我的 package.json 中包含 coffee-script 并将 node_modules/coffee-script/bin 添加到我的 Heroku PATH 来让它工作
【讨论】:
【参考方案4】:由于 Heroku 的更新,它现在允许 npm
安装 coffee-script
源。下面的答案是 Heroku 完全支持 node.js
之前的解决方法。要获得当前更好的解决方案,请参阅评分较高的答案,解释如何在 Heroku 上从 npm
简单地使用 coffee-script
。
老实说,最好的方法是像 Peter 建议的那样使用 coffee -c filename
事先编译它,但我想知道你是否可以有一种“预加载”preload.js
,它将使用 coffeescript
调用脚本作为a node_module
然后 compile() 要使用的脚本。这样您就可以在 heroku 上的节点中本地使用它们,而无需处理 repo 中的额外文件。
npm install coffee-script
然后在初始应用中,用javascript编写并使用coffee的compile函数调用*.coffee
文件:
var coffee = require('coffee-script');
coffee.compile('./server.coffee');
// could be coffee.run(file) instead, not sure
在yourapp.coffee
试试
console.log 'It worked!'
我不确定这是否可行,或者这是否是该函数的正确语法。 https://github.com/jashkenas/coffee-script/blob/master/lib/coffee-script.js#L24
如果你想用 ruby 来做,这里是:
演练如何在 Heroku 上的 rails 中使用 coffeescript: http://drnicwilliams.com/2010/03/15/using-coffeescript-in-rails-and-even-on-heroku/
建议使用 bistro_car (https://github.com/jnicklas/bistro_car)
gem install bistro_car
mkdir -p app/scripts
并将其添加到您的 Rails conf/environment.rb
config.gem 'bistro_car'
如果我找到其他方法或其他方式来本地运行 *.coffee
javascript 应用程序,我会更新这个答案,但希望这会给你一些关于如何让它工作的想法。
这里还有几个例子,但它们似乎都在使用 ruby 和 node.js:
http://forrst.com/posts/Doing_CoffeeScript_on_Heroku_a_Ruby_gem-OBk http://www.tangiblecolors.com/first-steps-with-coffeescript-and-how-to-use
希望这会有所帮助。
【讨论】:
我认为 Slick 的方向是正确的。您不需要任何二进制文件来运行.coffee
文件;你只需要 coffee-script
库,它是纯 JS。事实上,coffee
二进制文件是作为纯 JS 实现的(它包装了 CoffeeScript 的 command.js
)。
关于帖子的一些细节:你应该使用coffee.run
; coffee.compile
只是将 JS 输出作为字符串提供给您。 Nic 博士关于在 Heroku 上使用 CoffeeScript on Rails 的帖子已过时;您应该使用 Rails 3.1 或 Barista,而不是 bistro_car(一年多没有更新,而且不支持 Rails 3)。
我刚刚做了一个样本:github.com/lfreneda/how-to-coffeescript-on-heroku【参考方案5】:
我四处搜索,但似乎不清楚。这是heroku指南,没有提到coffeescript。 http://devcenter.heroku.com/articles/node-js
我认为您可以在提交并推送到 heroku 之前在您的应用程序的 git 存储库中运行 coffee -c .
(将此脚本作为部署脚本的一部分编写),然后使用该过程编译的 .js 代码。
【讨论】:
【参考方案6】: 将coffee-script
添加到您的package.json
将您的 Profile
更改为 web: coffee app.coffee
见florian.k's answer
【讨论】:
【参考方案7】:Chris Fung 的 custom buildpack 已经有一段时间了。我已经使用它几年了,直到最近它停止在 Heroku 上使用新的 Cedar-14 Stack 时。所以,我修改了 Chris 的 buildpack,你现在可以使用这个 new custom buildpack 在 Heroku 上运行 coffeescript 应用程序。
【讨论】:
以上是关于我可以在 Heroku 中运行咖啡脚本吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以在资产编译后删除 Heroku 上的应用程序/资产以减少 slug 大小吗