小编Ode*_*ded的帖子

使用EventMachine的Rails应用程序可以进行长轮询吗?

我正在Rails 3.1中编写一个简单的聊天室应用程序 - 用于学习目的.对于初学者我有所有需要的模型(消息,用户,房间等),事情很好.客户端每分钟轮询服务器(例如)并获得新消息(如果有).

我想将简单轮询更改为长轮询,并且无法确定是否可以在同一个应用程序中完成此操作,或者我是否必须为长轮询创建其他推送服务器.

我阅读了很多关于EventMachine的内容,并将我的rails应用程序更改为用户,因为我想将EventMachine用于事件驱动的机制.我认为EventMachine频道会派上用场.客户端将连接并等待聊天室中的消息,并且仅当一个人被发送到房间时它才会收到消息.

我无法弄清楚的是如何在所有客户端连接之间共享EventMachine :: Channel实例.这种方法是否可行,或者我是否采取了错误的方式?

如果可能的话,我想要一个可以作为Heroku上托管的单个rails应用程序运行的解决方案.

ruby ruby-on-rails long-polling eventmachine

5
推荐指数
1
解决办法
2572
查看次数

Rails will_paginate和ajax,在数据库表更改时进行分页

我正在尝试使用will_paginate用于Rails 3.2应用程序,并且我没有看到任何引用,当有人在分页时数据库中的数据被更改时会发生什么.更具体地说,添加了新记录.

我可能会在这里遗漏一些东西,但如果我知道它是如何工作的,will_paginate只会计算数据库中的记录.假设我一次加载一个包含5条记录的页面,并希望它们按最新的顺序排序.用户加载页面并获取在第1页显示的记录6-10(当时的最新记录).然后,有人在表中插入另一条记录,id = 11.之后,第一个用户点击进入第2页,但现在第2页给出了记录2-6.因此,用户在两个页面中都获得了id = 6.

这个问题听起来并不坏,但它是非常糟糕的,如果你想使用will_paginate分页对于无限滚动如下所示:http://railscasts.com/episodes/114-endless-page

我考虑添加第一页加载的时间戳并将其传递给连续的ajax调用以过滤首先出现的记录,以便不获取重复项.

是否有一些最佳实践方法来处理这个问题?

ajax ruby-on-rails will-paginate infinite-scroll

5
推荐指数
1
解决办法
647
查看次数

Rails迁移不能在heroku上运行,Model类报告为未初始化的常量

我正在尝试在heroku上运行迁移,我似乎无法找到为什么我的模型类无法识别的问题.

这是我的迁移:

class AddTestToGoals < ActiveRecord::Migration
  def change
    add_column :goals, :test, :integer, default: 0, null: false
    Goal.reset_column_information
    Goal.all.each { |g| g.update_attribute :test, Goal::PASS }
  end
end
Run Code Online (Sandbox Code Playgroud)

使用它运行它

heroku run rake db:migrate
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

uninitialized constant AddTestToGoals::Goal
Run Code Online (Sandbox Code Playgroud)

谁知道问题是什么?

编辑:错过键入之前,它是无法识别的模型,而不是其中的常量.

半个办公室:

使用此(我在这里找到:http://visibletrap.blogspot.co.il/2011/10/heroku-access-railss-model-in-migration.html)

class AddTestToGoals < ActiveRecord::Migration
  class Goal < ActiveRecord::Base; end
  def change
     add_column :goals, :test, :integer, default: 0, null: false
     Goal.reset_column_information
     Goal.all.each { |g| g.update_attribute :test, Goal::PASS }
  end
end
Run Code Online (Sandbox Code Playgroud)

heroku不抱怨不知道什么目标解决了问题的一半.但是,目标:: PASS无法识别.

migration ruby-on-rails heroku

4
推荐指数
1
解决办法
877
查看次数

在Heroku上使用Rails 3.2.3进行机架重写

我正在尝试在Heroku雪松堆栈上为Rails 3.2.3设置机架重写,并且在任何地方我都会看到它添加如下内容:

config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
  # rewrite rules
end
Run Code Online (Sandbox Code Playgroud)

但是试图在Heroku上运行它会给我一个错误:

`assert_index': No such middleware to insert before: Rack::Lock (RuntimeError)
Run Code Online (Sandbox Code Playgroud)

确实运行"heroku rake middleware"在开发时没有显示Rack :: Lock在Rack :: Lock就在那里.

第一个问题是Heroku上没有Rack :: Lock的原因,这是正确的吗?第二个问题,如果不是在Rack :: Lock之前,我应该在哪里插入Rack :: Rewrite?

谢谢!

rack middleware ruby-on-rails heroku rack-middleware

3
推荐指数
1
解决办法
949
查看次数