小编Sch*_*ems的帖子

将数据存储在没有数据库的Ruby on Rails中

我有一些数据值,我需要存储在我的rails应用程序,并想知道是否有任何替代创建数据库表只是为了完成这个简单的任务.

背景:我正在为rails我的ruby编写一些分析和仪表板工具,我希望通过缓存永远不会改变的结果来加速仪表板.现在我拉了所有用户最近30天,并重新安排它们,这样我就可以看到每天新用户的数量.它工作得很好但需要相当长的时间,实际上我只需要计算最近一天并将其余的数组存储在其他地方.

存储此阵列的最佳方法是哪里?

创建数据库表似乎有点矫枉过正,我不确定全局变量是否正确答案.是否有最佳实践来保存这样的数据?

如果有人做过这样的事情之前让我知道你做了什么以及结果如何.

database caching ruby-on-rails

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

Ruby 1.8.7:找不到符号错误

刚刚在一台带有新宝石套装的机器上安装了新的红宝石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.我的问题是:我需要做些什么来让我的系统找到这个符号,或者我需要安装其他东西?欢迎任何调试建议.

ruby symbols rubygems memprof

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

Rails 3.2防止使用错误保存对象

我有一个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中?

ruby ruby-on-rails ruby-on-rails-3

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

不同的资产摘要取决于css.sass或css

使用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.有谁知道不同的哈希值来自哪里?

ruby-on-rails asset-pipeline

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

使用Ruby的TracePoint获取方法参数

我可以使用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 …

ruby metaprogramming

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

Ruby:如果找不到类方法,则在Module中引发错误

我想在模块中放入一些代码,如果没有定义某个方法,则抛出错误.此模块依赖于此方法的外部定义,因为此方法的实现对所有类都不同.此代码将帮助开发人员尽早知道他们忘记实现该方法,而不是在他们尝试使用模块的功能时.

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回调的排序.如果没有,关于如何减少程序员可能包含我们模块的可能性而没有定义这种所需方法的任何其他想法?

ruby module metaprogramming include

4
推荐指数
2
解决办法
3247
查看次数

subdomain到heroku子域

我有一个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.comstore_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

subdomain dns cname heroku

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

highcharts:仅禁用图例中的单个元素,因此无法单击该元素

我想知道是否可以阻止图例中的一个元素禁用/启用.假设我的传奇中有三个类别:'car1','car2','car3'.我想只显示/隐藏'car2'和'car3',而'car1'一直显示.

谢谢!

plot legend highcharts

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

控制器最佳实践:Show中的多个方法或多个案例

我经常构建控制器,我想要多种方法(除索引,编辑,显示等).大多数情况下,我想要的动作可以归结为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 controller ruby-on-rails

2
推荐指数
1
解决办法
729
查看次数

检查Ruby on Rails中是否从数据库中新创建或检索了对象

我正在使用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时间戳的情况下做到这一点?

ruby ruby-on-rails

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

救援超时:: Redis Gem(Ruby)出错

我需要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)

有任何线索如何解救这个例外?

ruby exception-handling exception rescue redis

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

SQLite3 :: CantOpenException:在测试Ruby Gem时无法打开数据库文件

我在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

任何帮助表示赞赏.

ruby-on-rails rails-engines travis-ci

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

在一个命令中截断管道文本的中间并替换为省略号

我有一个很长的文本流,它开始发送到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 中执行此操作。那可能吗?如何?

bash shell

0
推荐指数
1
解决办法
327
查看次数