小编Sid*_*Sid的帖子

Authlogic记录方法.这是做什么的

我遇到了这种叫做记录的方法,Ryan bates在他的authlogic Railscast中使用它并且似乎无法理解它的作用.我已经阅读了文档,但我似乎无法理解该帮助程序是如何有用的.

def current_user
  return @current_user if defined?(@current_user)

  current_user_session && current_user_session.record
end
Run Code Online (Sandbox Code Playgroud)

我想知道的是,这只是从数据库中获取记录,为什么它与从数据库中获取数据的标准方式不同.

谢谢.

ruby activerecord ruby-on-rails authlogic

6
推荐指数
1
解决办法
857
查看次数

Fork上的Fork,Ruby,ActiveRecord和文件描述符

我知道当我们分叉一个进程时,子进程会继承父进程打开文件描述符和偏移的副本.根据手册页,这指的是父母使用的相同文件描述符.基于该理论在以下程序中


puts "Process #{Process.pid}"

file = File.open('sample', 'w')

forked_pid = fork do
    sleep(10)
    puts "Writing to file now..."
    file.puts("Hello World. #{Time.now}")       
end




file.puts("Welcome to winter of my discontent #{Time.now}")
file.close
file = nil

问题1: 休眠10秒的分叉进程不应该丢失其文件描述符,并且在父进程完成并关闭文件并退出时无法写入文件.
问题2:但无论出于何种原因,如果这都有效,那么ActiveRecord在这种情况下如何失去连接.它只有在我设置:reconnect => trueActiveRecord连接时才能正常连接,这意味着它失去连接.


require "rubygems"
require "redis"
require 'active_record'
require 'mysql2'

connection = ActiveRecord::Base.establish_connection({
    :adapter => 'mysql2',
    :username => 'root_user',
    :password => 'Pi',
    :host => 'localhost',
    :database => 'list_development', 
    :socket => '/var/lib/mysql/mysql.sock'

    })

class User < ActiveRecord::Base   
end

u = User.first

puts …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord fork ruby-on-rails file-descriptor

6
推荐指数
1
解决办法
649
查看次数

如何缓存对象存储多个请求?

我正在使用Ruby on Rails,我需要存储通过连接到另一台服务器获得的搜索结果集.问题是我不想将结果集存储在会话中,我想要一些可以将结果集对象存储在多个请求中的东西.

查询需要时间,所以我不想重复它.有没有办法存储对象或缓存对象,这样我就不必一次又一次地查询它?

可以使用某种对象存储吗?

任何帮助都会很棒.

如果memoizing是一个选项,我该如何记忆对象?连接仍然需要时间,以便如何存储结果集.

caching ruby-on-rails memoization

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

异步方法使用Ruby调用Ajax

我正在使用XMPP,我有一个消息回调,它会在发送每条消息时被激活.我的目标是将消息到达的数据发送到回调中的API,并根据响应使用XMPP客户端发回一些内容.

  1. 用户类型消息(浏览器聊天客户端)
  2. 消息通过XMPP到达服务器
  3. 消息将发送到API
  4. 收到回复
  5. 响应被发送回聊天客户端.

我的代码如下

admin_muc_client.activate_message_callbacks do |m|            
  sender    = m.from.resource
  room_slug = m.from.node
  message   = m.body                  

  r = HTTParty.get('http://example.com/api/v1/query?msg=message')
  Rails.logger.debug(r.inspect)
  admin_muc_client.send_message("Message #{r.body}") if m.from.resource != 'admin'
end
Run Code Online (Sandbox Code Playgroud)

我担心的是,由于回调是偶然的,并且对API的请求将是阻塞调用,这可能成为整个应用程序的瓶颈.我更喜欢使用像AJAX这样的Javascript来激活请求,当响应可用时发送数据.我怎么能在Ruby中实现它?

我查看了delayed_job和backgroundrb,它们看起来像火灾和忘记操作的工具.我需要一些能够以异步方式使用响应激活回调的东西.

我真的很感激如何实现我想要的异步行为的一些帮助.我也熟悉像RabbitMQ这样的消息队列,我觉得这会增加很多复杂性.

ruby io asynchronous xmpp blocking

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

如何使用read,readpartial和read_nonblock从ruby中的TCPServer套接字读取

我有两个关于从套接字读取的问题,以及如何在像Unicorn或Mongrel这样的Ruby服务器上进行管理

  1. 我已经知道从套接字读取不同于读取文件,并且没有发送明显的EOF消息,并且数据是无穷无尽的.那么你怎么知道何时停止阅读?我的TCPServer例如在这种情况下,当我通过http://localhost:9799浏览器访问我的服务器时,它在没有更多数据要读取之后挂起,它也不会抛出EOFError.

require 'socket'

READ_CHUNK = 1024
socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM)
addr = Socket.pack_sockaddr_in(9799, '127.0.0.1')
socket.bind(addr)
socket.listen(Socket::SOMAXCONN)
socket.setsockopt(:SOCKET, :REUSEADDR, true)

puts "Server is listening on port = 9799"
loop do 
    connection, addr_info = socket.accept
    data_buffer = ""

    loop do
        begin
            connection.read_nonblock(READ_CHUNK, data_buffer)
            puts "Buffer = #{data_buffer}"
        rescue Errno::EAGAIN => e
            IO.select([connection])         
            retry
        rescue EOFError
            break
        end
    end
    connection.write("HTTP/1.1 200 \r\n")
    connection.write("Content-Type: text/html\r\n")
    connection.write("Status 200 \r\n")
    connection.write("Connection: close \r\n")
    connection.write("Hello World \r\n")
    connection.close
end

我想知道Ruby服务器使用的最佳实践/标准方法.我看到Unicorn使用来自kgio库的read_nonblock而mongrel使用了readpartial(我不确定这些但是通过代码这就是我认为采用的方法.)即使检查\ …

ruby unix nonblocking httpserver tcpserver

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

Scala初学者在多个文件上编译和运行scala程序

我正在研究ScalaInAction中的示例,我无法运行遍布多个文件并放在单个包中的示例.

这是代码.

mongoclient.scala


package com.scalainaction.mongo
import com.mongodb._

class MongoClient(val host:String, val port:Int) {
    require(host != null, "You have to provide a host name")
    val underlying = new com.scalainaction.mongo.Mongo
    def this() = this("127.0.0.1", 27017)
    def version = underlying.getVersion
    def dropDB(name:String) = underlying.dropDatabase(name) 
    def createDB(name:String) = DB(underlying.getDB(name)) 
    def db(name:String) = DB(underlying.getDB(name))
}


DB.scala


package com.scalainaction.mongo
import com.mongodb.{DB => MongoDB}
import scala.collection.convert.Wrappers._

class DB private(val underlying: MongoDB) {
    private def collection(name: String) = underlying.getCollection(name)
    def readOnlyCollection(name: String) = new DBCollection(collection(name)) 

    def administrableCollection(name: String) …
Run Code Online (Sandbox Code Playgroud)

scala compilation classpath

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

如何减少通过 REST api 发送的数据的延迟

我有一个应用程序,它从我们的其他服务器之一获取 JSON 格式的数据。我面临的问题是,在请求此信息时存在显着延迟。由于传递了大量数据(每个请求大约 1000 条记录,其中每条记录都非常大),有没有一种方法可以通过压缩来帮助降低速度。如果是这样,您会推荐哪种压缩方案。

我在另一个线程上读到,他们的数据模式对需要使用的压缩类型也很重要。数据的模式是一致的,类似于以下

 :desc=>some_description
 :url=>some_url
 :content=>some_content
 :score=>some_score
 :more_attributes=>more_data
Run Code Online (Sandbox Code Playgroud)

有人可以推荐一个解决方案来减少这种延迟。他们的延迟大约是 6-8 秒。我正在使用 Ruby on Rails 开发这个应用程序,而提供数据的服务器大部分使用 Python。

python compression networking latency ruby-on-rails

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

StackOverflow中标记的AutoSuggest功能如何避免在每个键击中查询

我正在尝试使用Jquery为本网站文本区域下方的标签实现类似autosuggest功能的类似功能.我试图弄清楚在几次击键后如何发送请求,而不是在每次击键后发送.我正在使用'keyup'事件来触发我的应用程序上的请求.我意识到这可能会导致服务器命中次数过多,并可能影响性能.

如果有人可以解释我如何通过不在每个keyup上运行查询来实现stackOverflow所做的事情,这将是非常棒的.

jquery autocomplete autosuggest

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

如何使用Rails创建实时订阅源

我正在尝试创建一个实时Feed块,用于识别添加到论坛讨论中的最新数据,并使用该论坛上的最新帖子自动更新另一页面上的块.我使用Ruby on Rails,我真的很感激任何帮助.

(如果我的问题不明确,我希望我可以通过其中一个例子更加具体).我正在尝试构建像博客网站现在所拥有的滚动推特更新或者不介意像自动更新自己的推特主页这样的东西.我假设Twitter主页使用某种轮询功能.

任何关于如何构建其中一个的帮助都会很棒

ruby-on-rails feed

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

是否有必要使用尽可能少的队列和Web消息传递的解决方案

我在论坛中读到,在使用AMQP实现任何应用程序时,必须使用更少的队列.那么,如果我克隆twitter,我会为每个注册的用户提供一个独特且持久的队列,这是完全错误的吗?它似乎是最自然的方法,如果不为每个用户分配一个唯一的队列,那么如何设计这样的东西.

什么是最常用的Web消息传递方法.我看到RabbitHUb和Rabbit WebHooks,但Webhooks似乎不是一个可扩展的解决方案.我正在使用Rails和我的AMQP服务器作为守护进程运行.

messaging ruby-on-rails amqp rabbitmq

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