有可能以某种方式运行Rails.cache.clear并且只清除具有特定名称/字符串的键吗?
我不想清除整个缓存...只是用字符串键blog/post的名称(即blog/post/1,blog/post/2).
我正在使用dalli和memcached作为我的缓存并运行Rails 3.0.6.
嗨,我在服务器上设置我的Rails项目时遇到了麻烦,因为apache一直在抱怨
DalliError: No server available.
我安装memcached在我的ubuntu机器上,但它仍然无法正常工作.我的rails项目也在config.cache_store = :dalli_store, 'localhost:11211', { :namespace => "production" }environment/production.rb中.我该怎么调试呢?
我的日志显示在每个请求之前:
localhost:11211 failed (count: 6)
DalliError: No server available
Run Code Online (Sandbox Code Playgroud)
telnet到11211:
root@s2:/usr/local/www/production/current/log# telnet localhost 11211
Trying 127.0.1.1...
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud) 我无法使用dalli gem将memcached用作使用rails 4的会话存储.
这就是我所做的.
我将dalli gem添加到Gemfile中
gem 'dalli'
Run Code Online (Sandbox Code Playgroud)
我在config/initializers/session_store.rb中添加了以下行
Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 20.minutes
Run Code Online (Sandbox Code Playgroud)
我在development.rb中添加了以下行
config.cache_store = :dalli_store
Run Code Online (Sandbox Code Playgroud)
现在当我使用瘦服务器启动我的开发服务器而不启动memcached服务器时,我仍然可以照常登录.我应该得到一些错误,如没有运行memcached服务器或类似的东西.
我不确定rails是否使用memcached作为会话存储.
有人能告诉我在开发环境中使用memcached作为会话存储时我错过了什么?
为了您的信息,我一直在使用devise作为身份验证gem.
谢谢
我的应用程序有一个功能,允许管理员通过 GUI 更改 cache_store 配置。然后新的配置将立即生效。
我的 production.rb 中的默认cache_store:
config.cache_store = :memory_store
Run Code Online (Sandbox Code Playgroud)
管理员可以选择更改为将 memcached 与 Dalli 存储结合使用。我尝试更改 Rails.application.config.cache_store:
Rails.application.config.cache_store = :dalli_store, 'localhost:11211', 'localhost:11212'
Run Code Online (Sandbox Code Playgroud)
但 Rails.cache 没有改变:
Rails.cache
=> <#ActiveSupport::Cache::MemoryStore entries=0, size=0, options={}>
Run Code Online (Sandbox Code Playgroud)
有办法做到这一点吗?
我一直在苦苦寻找Rails设置的默认过期时间,以防我们在向memcache存储键值对时没有提供任何默认过期时间?例如Rails.cache.write('some-key','some-value')
如果我们没有指定,rails会默认设置一些到期时间吗?
我们有一个页面显示了我们应用程序的前几组。排行榜的计算成本很高,因此我们将结果缓存一个小时,如下所示:
@groupboard = Rails.cache.fetch("top_groups", :expires_in => 1.hour) do
Group.top_groups
end
Run Code Online (Sandbox Code Playgroud)
第一次写入缓存后,这给出了错误。在控制台中四处查看,我看到Group.top_groups返回了一系列如下所示的项目:
[#<Group id: 4, name: "IBP", rank: 6, users_count: 13, leader_id: 4662>, 3887]
Run Code Online (Sandbox Code Playgroud)
当我查看从缓存返回的结果时,它看起来如下:
[#<Group id: 4, name: "IBP", rank: 6, users_count: 13, leader_id: 4662>, :@new_record_before_save], false, 3887]
Run Code Online (Sandbox Code Playgroud)
有谁知道会导致@new_record_before_save和'false'值插入缓存中该对象的所有条目的原因是什么?
我们正在使用Dalli,Memcached 1.4.9,Rails 3.2.4,Ruby 1.9.2
我将使用 Dalli 缓存作为键值存储。
通常在生产和开发环境中,我们有线路
config.cache_store = :dalli_store
Run Code Online (Sandbox Code Playgroud)
那么我们可以使用Rails.cache构造来读取和写入缓存。
但是通常在测试环境中,我们没有这个配置行。
在测试环境中设置缓存以测试我的存储逻辑的正确方法是什么?
PS我正在使用Linux(Ubuntu)
select * from Foo where id = 200
Run Code Online (Sandbox Code Playgroud)
如何通过id缓存查找对象,因为我们观察到一直在某个id上进行select调用.我们应该如何以非突兀的方式在rails中启用它,以便我们可以在将来的任何缓存存储之间切换(比如memcached或redis)
编辑:
与基于Hibernate的缓存策略非常类似, org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE后者适用于Java EE中的所有Entity类.
我想在 Rails 中使用 memcached。
所以我设置在我本地。好的。并部署到我的服务器..出现问题
问题是 dalli 无法加载到 active_support/cache/mem_cache_store.rb 中。
我的服务器环境:ubuntu / nginx / unicorn / Rails 4 / capistrano 2
unicorn.log (编辑(添加更多日志))
E, [2014-08-09T10:46:52.306478 #3576] ERROR -- : reaped #<Process::Status: pid 25225 exit 1> worker=1
I, [2014-08-09T10:46:52.306772 #3576] INFO -- : worker=1 spawning...
I, [2014-08-09T10:46:52.315784 #25228] INFO -- : worker=1 spawned pid=25228
I, [2014-08-09T10:46:52.316264 #25228] INFO -- : Refreshing Gem list
You don't have dalli installed in your application. Please add it to your Gemfile and run bundle install …Run Code Online (Sandbox Code Playgroud) 我最近学习了更多关于 Memcached 的知识,以及 Dalli 如何与不同的缓存策略配合使用。我正在尝试使用我们的生产级项目之一远程连接到 heroku 上的 memcachier。通过一些教程,我发现了如何通过 Dalli 远程连接到远程 memcachier。
沙箱.rb:
require 'dalli'
memcachier_server = 'host_name:port'
memcachier_user = 'abc123'
memcachier_password = '1x8w3asdf82jdf'
cache = Dalli::Client.new(memcachier_server,
{
:username => memcachier_user,
:password => memcachier_password,
:failover => true,
:socket_timeout => 1.5,
:socket_failure_delay => 0.2
})
p cache.stat
Run Code Online (Sandbox Code Playgroud)
我在运行时确认它有效,ruby sandbox.rb并且输出如下:
I, [2015-03-17T01:45:20.703729 #42640] INFO -- : Dalli/SASL authenticating as abc123
I, [2015-03-17T01:45:21.305454 #42640] INFO -- : Dalli/SASL: abc123
{"xyz.memcacheir.com:11211"=>{"curr_items"=>"24446", "bytes"=>"110738688", "evictions"=>"2586065", "expired"=>"0", "cas_hits"=>"0", "cas_misses"=>"0", "cas_badval"=>"0", "limit_maxbytes"=>"120586239", "total_items"=>"3782835", "bytes_read"=>"1559184266", "bytes_written"=>"33808073647", "curr_connections"=>"5", "total_connections"=>"1098", …Run Code Online (Sandbox Code Playgroud)