我遇到了这种叫做记录的方法,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)
我想知道的是,这只是从数据库中获取记录,为什么它与从数据库中获取数据的标准方式不同.
谢谢.
我知道当我们分叉一个进程时,子进程会继承父进程打开文件描述符和偏移的副本.根据手册页,这指的是父母使用的相同文件描述符.基于该理论在以下程序中
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 on Rails,我需要存储通过连接到另一台服务器获得的搜索结果集.问题是我不想将结果集存储在会话中,我想要一些可以将结果集对象存储在多个请求中的东西.
查询需要时间,所以我不想重复它.有没有办法存储对象或缓存对象,这样我就不必一次又一次地查询它?
可以使用某种对象存储吗?
任何帮助都会很棒.
如果memoizing是一个选项,我该如何记忆对象?连接仍然需要时间,以便如何存储结果集.
我正在使用XMPP,我有一个消息回调,它会在发送每条消息时被激活.我的目标是将消息到达的数据发送到回调中的API,并根据响应使用XMPP客户端发回一些内容.
我的代码如下
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这样的消息队列,我觉得这会增加很多复杂性.
我有两个关于从套接字读取的问题,以及如何在像Unicorn或Mongrel这样的Ruby服务器上进行管理
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(我不确定这些但是通过代码这就是我认为采用的方法.)即使检查\ …
我正在研究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) 我有一个应用程序,它从我们的其他服务器之一获取 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。
我正在尝试使用Jquery为本网站文本区域下方的标签实现类似autosuggest功能的类似功能.我试图弄清楚在几次击键后如何发送请求,而不是在每次击键后发送.我正在使用'keyup'事件来触发我的应用程序上的请求.我意识到这可能会导致服务器命中次数过多,并可能影响性能.
如果有人可以解释我如何通过不在每个keyup上运行查询来实现stackOverflow所做的事情,这将是非常棒的.
我正在尝试创建一个实时Feed块,用于识别添加到论坛讨论中的最新数据,并使用该论坛上的最新帖子自动更新另一页面上的块.我使用Ruby on Rails,我真的很感激任何帮助.
(如果我的问题不明确,我希望我可以通过其中一个例子更加具体).我正在尝试构建像博客网站现在所拥有的滚动推特更新或者不介意像自动更新自己的推特主页这样的东西.我假设Twitter主页使用某种轮询功能.
任何关于如何构建其中一个的帮助都会很棒
我在论坛中读到,在使用AMQP实现任何应用程序时,必须使用更少的队列.那么,如果我克隆twitter,我会为每个注册的用户提供一个独特且持久的队列,这是完全错误的吗?它似乎是最自然的方法,如果不为每个用户分配一个唯一的队列,那么如何设计这样的东西.
什么是最常用的Web消息传递方法.我看到RabbitHUb和Rabbit WebHooks,但Webhooks似乎不是一个可扩展的解决方案.我正在使用Rails和我的AMQP服务器作为守护进程运行.
ruby ×4
activerecord ×2
amqp ×1
asynchronous ×1
authlogic ×1
autocomplete ×1
autosuggest ×1
blocking ×1
caching ×1
classpath ×1
compilation ×1
compression ×1
feed ×1
fork ×1
httpserver ×1
io ×1
jquery ×1
latency ×1
memoization ×1
messaging ×1
networking ×1
nonblocking ×1
python ×1
rabbitmq ×1
scala ×1
tcpserver ×1
unix ×1
xmpp ×1