我正在Rails 3.1中编写一个简单的聊天室应用程序 - 用于学习目的.对于初学者我有所有需要的模型(消息,用户,房间等),事情很好.客户端每分钟轮询服务器(例如)并获得新消息(如果有).
我想将简单轮询更改为长轮询,并且无法确定是否可以在同一个应用程序中完成此操作,或者我是否必须为长轮询创建其他推送服务器.
我阅读了很多关于EventMachine的内容,并将我的rails应用程序更改为用户,因为我想将EventMachine用于事件驱动的机制.我认为EventMachine频道会派上用场.客户端将连接并等待聊天室中的消息,并且仅当一个人被发送到房间时它才会收到消息.
我无法弄清楚的是如何在所有客户端连接之间共享EventMachine :: Channel实例.这种方法是否可行,或者我是否采取了错误的方式?
如果可能的话,我想要一个可以作为Heroku上托管的单个rails应用程序运行的解决方案.
我正在尝试使用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调用以过滤首先出现的记录,以便不获取重复项.
是否有一些最佳实践方法来处理这个问题?
我正在尝试在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无法识别.
我正在尝试在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?
谢谢!