ROR中我无法解决的问题
By admin
目前已经有两个rails3的系统部署下去使用了,遇到了如下一些问题,至今无法解决。
一个是observer问题
这个observer是记录很多表数据的创建用户用的
class RecordUserObserver < ActiveRecord::Observer include UserSessionsHelper observe Client, ClientEmail, Company, PrintLabel, ReSynthesis, Synthesis, Aminolysis, PageElectrophoresis, Desalt, Drain, Checkout, CheckoutOrder, CheckoutSign, Invoice, InvoiceSign, Cash, BadDebt, User, Role, Price, DeletionLogger, CheckoutPrimer, Order # 记录当前用户 def before_create(record) record.user_id = current_user.id end end 其中用到的 UserSessionsHelper如下 module UserSessionsHelper private # 当前用户的session def current_user_session return @current_user_session if defined?(@current_user_session) @current_user_session = UserSession.find end # 当前登录用户 def current_user return @current_user if defined?(@current_user) @current_user = current_user_session && current_user_session.record end end 在实际使用时,有时Order这个表的数据的创建用户会记录成其他用户而不是当前系统中登录的用户,而且这个错误不是总有,非常奇怪,让我感觉observer是不是串了线程了。后来把Order从这个observer中去掉,在实际创建的controller里记录user_id,就正常了。 问题2 是一个prawn生成pdf的功能 每个order的id生成这个pdf中的一页。 一次有用户说,页面中只check了一个order的checkbox,然后提交页面,按理说只传了一个order.id,但是下载的pdf文件中莫名其妙包含了很多个order的内容。 而且pdf中页面有重叠现象。我的第一感觉就是rails的内存没释放干净。重启当前rails服务,即刻OK。不过总有点不舒服。 问题2解决,是因为我用了@@pdf_label 类变量。类变量在每次请求时不会释放,是在server开始的时候生成的,然后一直存在。恩,慎用类变量。