2011-06-22 46 views
3

我想让咖啡师在Rails 2.3应用程序中运行(可能不会被移动到新版本的rails for the beeing ..)。我将应用程序切换到捆绑,所以我添加了以下宝石到我的Gemspec:在Rails 2.3上安装barista/coffeescript 2.3

gem "barista" 
gem "json" 

然后执行捆绑安装,通过运行。现在据我所知,“编译”咖啡标记的时候,咖啡师有一个耙子任务。但它似乎没有正确安装,所以我可以使用它与耙子。即当我执行耙 - T没有barista:brew

我看到git集线器上的挂起请求,建议添加要求'barista/tasks',但只会导致rake找不到它。那么我在做什么错误或更一般的如何在Rails 2.3.x上使用barista运行?

+0

在Rails 3中,有一个'轨产生的咖啡师:install'发电机。这个生成器的主要作用是(AFAICT)创建一个名为barista_config.rb的初始化器和您提到的rake任务。您可以查看GitHub源代码中的模板并创建自己的模板。 –

+0

@Steve Ross我真​​的这样做了,我想我会按照你的建议去做,并且创建我自己的耙子任务或者使用Gurad,即guard-coffeescript来为我编译所有的代码。 – Mark

+0

我会使用警卫。如果你不介意在部署之前进行编译,那么守卫就好了。另外,查看'Jammit'(http://documentcloud.github.com/jammit/),它不会解决您的相同问题,但会缩小输出和包资产以便于部署。 –

回答

2

因为我使用了Barista,并且我没有在任何项目中使用它,所以我无法验证它。

但我记得Barista的一个优点是,它等待服务请求,直到重新编译修改过的CoffeeScript文件。这可确保浏览器不会请求过时的文件。

因此,不需要使用Rake任务来编译CoffeeScript文件。

的CoffeeScript本身也自带了手表的功能,当检测到变化时,编译CoffeeScripts:

coffee -w /path/to/scripts 

为什么我停止使用咖啡师很简单,我发现Guard的原因。所以我写了guard-coffeescript在我保存文件的同一时间编译我的CoffeeScripts。

卫队,CoffeeScript中有超过百瑞斯塔和CoffeeScript的一些优势:

  • 快速和低CPU占用率,因为它依赖于文件系统修改事件。
  • 可以通过多种方式配置,例如多个源文件夹和输出文件夹。
  • 发生错误时即时反馈,即使系统通知像Growl一样。
+0

Thx我会看看它.. – Mark

+0

Dankefürden Tipp!在和咖啡师一起演奏之后,我开始使用你的后卫扩展来制作咖啡脚本,它的功能和广告一样。 :) – Mark

1

请注意,根据Barista的自述文件,Barista的Rails 2支持“未经测试”(它最初仅为Rails 3构建),因此可能存在兼容性问题。另请注意,您需要therubyracer宝石,或者您的系统PATH(或任何其他支持ExecJS的JS运行时)的二进制文件node

试试这个:

  1. 名为foo.coffee文件添加到文件夹app/coffeescripts与内容

    alert 'Hello, Barista!'

  2. 现在添加<%= javascript_include_tag "foo" %>到ERB文件并加载该页面。

你应该得到警告,就像你如果编译foo.jspublic/javascripts

+0

感谢您的建议,不幸的是,似乎咖啡师在Rails 2中工作不正常(至少在我的机器上)。我想我只需要预编译我所有的咖啡脚本。 – Mark

+0

@Mark Bummer。那么,你也可以尝试更老的[bistro_car](https://github.com/dcolthorp/bistro_car)(这需要你在PATH上有'coffee')。 –

+0

感谢您的提示,我可能会看看它,但我对警卫解决方案非常满意。 – Mark

1

我已经成功整合了barista和rails 2.3.14。在开发过程中,当我要求一个js文件时,会立即找到并编译coffeescript文件。

我也成功运行了咖啡师:brew rake任务并生成了js文件。

我注意到对于生产,除非我包含ExecJS兼容编译器,否则我需要在推送前预编译我的js文件,这可能是@netzpirat的另一个防护解决方案的+1。

仅供参考 - 我使用的是Barista 1.3.0和coffee-script 2.2。不知道这是如何影响的东西,但认为这是值得注意的。

另外,我添加了一行来加载咖啡师的任务在我的Rakefile:

# in my Rakefile 
load "barista/tasks/barista.rake" 
+0

最后,我不得不删除咖啡师和咖啡 - > JS编译,因为它是我的共享主机的红线,导致应用程序失败。看来看/编译咖啡 - > js对我的服务器来说有点太多了。通过使用watch选项简单地运行'coffee'(如上所述),所有的coffee-> js转换都会在开发期间进行并签入代码库,而不需要Barista在部署的服务器上运行。 –