我有一些数据值,我需要存储在我的rails应用程序,并想知道是否有任何替代创建数据库表只是为了完成这个简单的任务.
背景:我正在为rails我的ruby编写一些分析和仪表板工具,我希望通过缓存永远不会改变的结果来加速仪表板.现在我拉了所有用户最近30天,并重新安排它们,这样我就可以看到每天新用户的数量.它工作得很好但需要相当长的时间,实际上我只需要计算最近一天并将其余的数组存储在其他地方.
存储此阵列的最佳方法是哪里?
创建数据库表似乎有点矫枉过正,我不确定全局变量是否正确答案.是否有最佳实践来保存这样的数据?
如果有人做过这样的事情之前让我知道你做了什么以及结果如何.
刚刚在一台带有新宝石套装的机器上安装了新的红宝石1.8.7 REE和MRI(使用RVM)但是当我尝试使用memprof时我得到了这个错误
$ gem install memprof
$ irb
>> require 'rubygems'
>> require 'memprof'
>> LoadError: dlopen(/Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle, 9): Symbol not found: __mh_bundle_header
Referenced from: /Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle
Expected in: flat namespace
in /Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle - /Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle
from /Users/schneems/.rvm/gems/ruby-1.8.7-p352@test/gems/memprof-0.3.10/lib/memprof.bundle
from /Users/schneems/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in `require'
from (irb):2
Run Code Online (Sandbox Code Playgroud)
错误是Symbol not found: __mh_bundle_header.我的问题是:我需要做些什么来让我的系统找到这个符号,或者我需要安装其他东西?欢迎任何调试建议.
我有一个ActiveRecord对象,我想阻止它被保存,而不需要对模型进行永久性验证.你曾经能够做这样的事情,errors.add但它看起来不再适用了.
user = User.last
user.errors.add :name, "name doesn't rhyme with orange"
user.valid? # => true
user.save # => true
Run Code Online (Sandbox Code Playgroud)
要么
user = User.last
user.errors.add :base, "my unique error"
user.valid? # => true
user.save # => true
Run Code Online (Sandbox Code Playgroud)
如何在不修改模型的情况下阻止用户对象保存在Rails 3.2中?
使用Rails 3.2.13我得到不同的资产路径,asset_path取决于我是否使用.css.sass或只是.css这个预期?
例如,如果我app/assets/stylesheets/foo.css.sass在样式表目录中只有一个而没有其他内容,如果我不小心使用asset_pathsass版本,我会得到一个不存在的文件:
Loading production environment (Rails 3.2.13)
irb(main):001:0> helper.asset_path "foo.css.sass"
=> "/assets/foo-b148cf064a02aef053d2902b6a1fa5a9.css"
Run Code Online (Sandbox Code Playgroud)
使用asset_pathjust plain css会产生正确的路径.
irb(main):002:0> helper.asset_path "foo.css"
=> "/assets/foo-1b1fbb65d54bbc52b702c0f1d2efcc38.css"
Run Code Online (Sandbox Code Playgroud)
仅foo-1b1fbb65d54bbc52b702c0f1d2efcc38.css在我运行时生成rake assets:precompile.有谁知道不同的哈希值来自哪里?
我可以使用TracePoint API来访问Ruby方法的参数:
def foo(foo_arg)
end
trace = TracePoint.trace(:call, :c_call) do |tp|
tp.disable
case tp.method_id
when :foo, :sub
method = eval("method(:#{tp.method_id})", tp.binding)
method.parameters.each do |p|
puts "#{p.last}: #{tp.binding.local_variable_get(p.last)}"
end
end
tp.enable
end
trace.enable
foo(10)
# => foo_arg: 10
Run Code Online (Sandbox Code Playgroud)
但是,当我使用ac方法调用尝试此操作时,出现错误。
"foo".sub(/(f)/) { $1.upcase }
script.rb:20:in `method': undefined method `sub' for class `Object' (NameError)
from script.rb:20:in `<main>'
from script.rb:8:in `eval'
from script.rb:8:in `block in <main>'
from script.rb:20:in `<main>'
Run Code Online (Sandbox Code Playgroud)
由于使用C方法调用和常规Ruby方法调用时返回的绑定之间存在差异,因此似乎发生这种情况。
在Ruby情况下tp.self等于tp.binding.eval("self")是main然而在C的情况下tp.self是"foo"与tp.binding.eval("self")是main …
我想在模块中放入一些代码,如果没有定义某个方法,则抛出错误.此模块依赖于此方法的外部定义,因为此方法的实现对所有类都不同.此代码将帮助开发人员尽早知道他们忘记实现该方法,而不是在他们尝试使用模块的功能时.
module MyModule
def self.included(klass)
raise "MyModule: please `def my_method` on #{klass}" unless klass.respond_to?(:my_method)
end
end
Run Code Online (Sandbox Code Playgroud)
如果没有定义方法,我可以很容易地在模块的包含定义中引发错误,但是由于大多数模块都包含在文件的顶部,所以我的必需方法很可能是在类中定义的,而不是在我的模块包含之前.
class MyClass
include MyModule
def self.my_method
# ...
end
end
Run Code Online (Sandbox Code Playgroud)
这仍然会引发错误:(
只有在类定义中没有定义方法时才可能引发错误吗?几乎需要一个class.onload回调的排序.如果没有,关于如何减少程序员可能包含我们模块的可能性而没有定义这种所需方法的任何其他想法?
我有一个heroku应用程序,让我们调用它showering-wind-33.我购买了一个顶级域名,让我们调用它example.com,并通过添加指向的CNAME正确配置我的域以在heroku上呈现内容showering-wind-33.herokuapp.com.因此,当我访问example.com它时,会呈现内容showering-wind-33.herokuapp.com.
我有另一个域名foo.com,我想store.foo.com指向一个内容store_for_foo.example.com,我在做这个问题时遇到了问题.
我想:1.添加CNAME记录在我的DNS指向store.foo.com到store_for_foo.example.com
2.添加store.foo.com到"域"在我的Heroku应用程序设置下.
但结果是store.foo.com最终指向example.com但不是store_for_foo.example.com
我做错了什么?任何帮助将不胜感激 - 谢谢!我怎样才能获得store.foo.com要显示的内容store_for_foo.example.com
我想知道是否可以阻止图例中的一个元素禁用/启用.假设我的传奇中有三个类别:'car1','car2','car3'.我想只显示/隐藏'car2'和'car3',而'car1'一直显示.
谢谢!
我经常构建控制器,我想要多种方法(除索引,编辑,显示等).大多数情况下,我想要的动作可以归结为show,因为它们是简单的GET操作,但是我不想在任何一个控制器动作中放置过多的逻辑.
这是一个快速举例说明实现同样事情的两种不同方式......
class TwitterFriendController < ApplicationController
## lump everything into show?
def show
if params[:id] == "follow"
users = current_user.following
elsif params[:id] == "follow_me"
users = current_user.users_who_follow_me
elsif params[:id] == "following_follow_me"
users = current_user.following_who_follow_me
elsif params[:id] == "following_who_do_not_follow_me"
users = current_user.following_who_do_not_follow_me
...
end
respond_with do |format|
format.json do {...}
end
end
## or split everything out into separate methods, this requires
additional routing
def following
...
end
def users_who_follow_me
...
end
def following_who_follow_me
...
end
def following_who_do_not_follow_me
...
end
end …Run Code Online (Sandbox Code Playgroud) 我正在使用Ruby on Rails,我有一个find_or_create_by_custom_stuff方法.但是,我想知道我找回的对象是否已找到,或者是否已创建.像这样的东西
user = User.find_or_create_by_custom_stuff(params[:user])
if user.was_found_from_database?
...
elsif user.was_recently_created?
...
end
Run Code Online (Sandbox Code Playgroud)
有没有办法可以在不依赖用户的created_at时间戳的情况下做到这一点?
我需要Timeout::Error从Redis库中拯救一个凸起但是我遇到了一个问题,抢救那个特定的类似乎不起作用.
begin
Redis.new( { :host => "127.0.0.X" } )
rescue Timeout::Error => ex
end
=> Timeout::Error: Timeout::Error from /Users/me/.rvm/gems/ree-1.8.7-2011.03@gowalla/gems/redis-2.2.0/lib/redis/connection/hiredis.rb:23:in `connect'
Run Code Online (Sandbox Code Playgroud)
当我试图拯救Exception它仍然无法正常工作
begin
Redis.new( { :host => "127.0.0.X" } )
rescue Exception => ex
end
=> Timeout::Error: Timeout::Error from /Users/me/.rvm/gems/ree-1.8.7-2011.03@gowalla/gems/redis-2.2.0/lib/redis/connection/hiredis.rb:23:in `connect'
Run Code Online (Sandbox Code Playgroud)
如果我尝试手动提升异常,我可以拯救它,但不知道为什么我从Redis Gem(2.2.0)中调用它时无法解救它.
begin
raise Timeout::Error
rescue Timeout::Error => ex
puts ex
end
Timeout::Error
=> nil
Run Code Online (Sandbox Code Playgroud)
有任何线索如何解救这个例外?
我在travis上测试gem时遇到此错误消息:
SQLite3::CantOpenException: unable to open database file
Run Code Online (Sandbox Code Playgroud)
我甚至没有在任何测试中访问数据库,这很奇怪.虽然我没有任何固定装置,但看起来回溯指向固定装置.即使我这样做,db也是sqlite3 ...它不应该能够动态创建吗?
你可以在这里看到构建输出:http://travis-lite.com/schneems/maildown/jobs/9662299
任何帮助表示赞赏.
我有一个很长的文本流,它开始发送到stdout. 在 bash 中,我可以通过运行来显示前几行:
$ seq 1 5010 | head 5
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
或结束
$ seq 1 5010 | tail 5
5006
5007
5008
5009
5010
Run Code Online (Sandbox Code Playgroud)
但是我需要显示前 5 个和最后 5 个以及中间的省略号......所以输出可能看起来像
1
2
3
4
5
...
5006
5007
5008
5009
5010
Run Code Online (Sandbox Code Playgroud)
我需要在单行股票 bash 中执行此操作。那可能吗?如何?