我在虚拟Linux服务器上运行Ruby on Rails应用程序,其上限为1GB RAM.目前,我不断达到极限,并希望优化内存利用率.我正在考虑的一个选择是减少独角兽工人的数量.
那么确定使用的独角兽工人数量的最佳方法是什么?
目前的设置是10名工作人员,但我在Google Analytics Real-Time上看到的每秒最大请求数为3(仅在高峰时刻获得一次;在99%的时间内不超过每秒1次请求).
那么这是一个保存假设,我现在可以与4名工人一起工作,为意外数量的请求留出空间吗?我应该在确定工作人员数量时使用哪些指标以及我可以在Ubuntu计算机上使用哪些工具?
optimization performance memory-management ruby-on-rails unicorn
我最近想更新我的gem包但遇到了libv8的安装问题(对therubyracer的要求):
Installing libv8 (3.3.10.3) with native extensions /usr/local/rvm/rubies/ruby-1.9.3-head/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:552:in `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) /usr/local/rvm/rubies/ruby-1.9.3-head/bin/ruby extconf.rb Checking for Python...*** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.
我在therubyracer github网站上找到了问题报告,它建议卸载并重新安装libv8,但这不适用于我的Ubuntu 11.04机器.任何想法 - 还是我坚持旧版本一段时间?
我有一个简单的rails应用程序,包含模型项目和阶段.一个项目有很多阶段,但只有阶段可以一次激活(即"当前").我仍然希望其他阶段可以访问,但当前阶段应该是应用程序的主要锚点.关于如何实现此要求的决定对我如何处理模型访问,验证和创建更新的视图/表单具有重大影响.
所以问题是:如何在不增加太多复杂性的情况下实现这种"has_many但只有一个当前的关联"?主要目标是:简化当前阶段的访问+确保一次不能超过1个活动阶段.
当然,我自己也有一些想法,想出了三个选项,我想在这里提出.任何关于为什么我应该选择一个选项而不是另一个选项(或建议更简单的解决方案)的反馈将不胜感激:
第一选择:
[Project] has_many :phases
[Project] has_one :current_phase, :class_name => "Phase", :conditions => { :current => true }
Run Code Online (Sandbox Code Playgroud)
缺点:我有一个用于创建项目和相应阶段的嵌套表单.似乎没有简单的方法可以将新创建的一个阶段设置为活动状态
第二种选择:
[Project] has an attribute "current_phase_id"
[Project] has_many :phases
[Project] belongs_to phase, :foreign_key => "current_phase_id"
Run Code Online (Sandbox Code Playgroud)
缺点:与选项1相同,但我有另一个属性和belongs_to关联,这似乎很奇怪(为什么一个项目属于其中一个阶段?)
第三种选择:
[Phase] has an attribute "active" (boolean)
[Phase] scope :active, :conditions => { :active => true}
# Access to current phase via: project.phases.active
Run Code Online (Sandbox Code Playgroud)
缺点:我必须通过验证确保一次只有一个活动阶段,如果同时创建/编辑多个阶段或从一个阶段切换到另一个阶段,则很难; 加:project.phases.active返回一个数组,如果我没有弄错的话
非常感谢您的帮助.谢谢!
增加了奖励以鼓励就该主题提出进一步意见.Bounty将获得最佳解决上述主要目标的解决方案; 或者如果没有提到替代解决方案,那么答案最能解释为什么我应该支持给定选项中的一个而不是另一个.谢谢!
我有一个CRUD用户控制器.当我在浏览器中打开"用户编辑"页面时,我的日志显示如下:
Started GET "/users/1/edit" for 127.0.0.1 at 2011-06-21 20:09:37 +0200
Processing by UsersController#edit as HTML
Parameters: {"id"=>"1"}
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE
`users`.`id` = ? LIMIT 1 [["id", 1]]
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE
`users`.`id` = ? LIMIT 1 [["id", "1"]]
Run Code Online (Sandbox Code Playgroud)
在编辑操作中,我只是调用一个返回的私有函数用户
@user ||= User.find(params[:id])
Run Code Online (Sandbox Code Playgroud)
该视图如下所示:
<%= settings_title(@user.username) %>
<%= form_for @user, :html => { :multipart => true } do |f| %>
<%= render "form", :user => @user
<div class="action"><%= submit_tag t("users.edit.submit"), :class => …
Run Code Online (Sandbox Code Playgroud) 这里非常基本的问题,我需要在我的Category模型上编写一个过滤器,以确保深度永远不会超过2.这是我到目前为止所拥有的.
应用程序/模型/ category.rb
before_create :check_depth
def check_depth
self.depth = 1 if depth > 2
end
Run Code Online (Sandbox Code Playgroud)
我需要它而不是将深度设置为1,只是为了返回错误消息,但我甚至无法让当前的设置工作,我得到错误
undefined method `>' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
那么,而不是像我正在尝试做的那样将深度设置为一个而不是如何发送错误?任何帮助使当前功能为信息目的工作?提前致谢
在创建用户时,我正在检查是否接受了使用条款,如下所示:
# user.rb
class User < ActiveRecord::Base
validates_acceptance_of :terms, :message => :terms_not_accepted, :on => :create
attr_accessible :terms, :on => :create # required because I completely disable mass-assignment in an initializer
end
Run Code Online (Sandbox Code Playgroud)
我在表单视图中有以下字段:
<label class="checkbox"><%= f.check_box :terms %><span><%=t "users.form.label.terms" %></span></label>
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都按预期工作.如果用户不接受条款,则会出现错误消息.但是,如果我只是使用Chrome开发人员工具从HTML页面中删除复选框(以及由视图帮助程序生成的相应隐藏字段),则将创建用户!
我可以在控制台中重现这个:
irb(main):001:0> u = User.new # => #<User ...>
irb(main):002:0> u.terms # => nil
irb(main):003:0> u.save! # => other validations fail, but terms check succeeds!
irb(main):004:0> u.terms = false # => false
irb(main):005:0> u.save! # => terms validation fails …
Run Code Online (Sandbox Code Playgroud) performance ×2
associations ×1
forms ×1
gem ×1
has-many ×1
optimization ×1
unicorn ×1
validation ×1