我可以在 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.runcoffee.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 运行 mongoimport 吗?

使用 karma 持续编译和运行我的咖啡脚本测试

我可以在资产编译后删除 Heroku 上的应用程序/资产以减少 slug 大小吗

是否可以在咖啡脚本评论中添加哈希

从脚本填充数据库时出现 Django Heroku DataError

在 AWS Elastic Beanstalk 上运行临时脚本