全球国家接受的方法是什么?

时间:2016-01-28 11:09:29

标签: ruby-on-rails

我想知道你们怎么会考虑在不使用数据库的情况下在会话中存储一些简单的东西的最佳方法。 我希望自己喜欢拥有'模式'到一个网站。所以它可以是模式a或b,并且根据模式,按钮可以做不同的事情。

使用Rails.cache.readwrite是最佳选择吗?如果你把缓存留作文件系统,我听说它有heroku的问题,那么由于多线程问题就会出现内存问题吗?

我真的试图避免在数据库中使用整个表格,以便用户在每次请求时检查网站的全局状态。

3 个答案:

答案 0 :(得分:1)

为了拥有一个"全球" state,那么你需要为你的应用程序的每个实例创建一个singke依赖项。

事实上,您不能依赖cookie或会话,它们是面向客户的,并且不会在客户之间共享。

数据库是最常用的方法。在某些情况下,可能可以使用文件系统,但Heroku不能使用文件系统,因为您的应用可能会在不同的文件系统下运行多个不同的实例。

任何可以跨实例轻松共享的解决方案都可以使用:

  • 像Redis这样的内存数据库
  • SQL或NoSQL数据库
  • 缓存系统,只要它们不是特定于一个实例。 Memcached可能有效,但它不会持久(因此你可能失去状态)
  • 外部存储(例如Amazon S3)

对我来说,关系数据库或像Redis这样的内存数据库似乎是最合理的解决方案。

答案 1 :(得分:0)

如果您想要按用户设置 - 请考虑存储在会话中(可以存储在Cookie中),或直接存储在Cookie中。 这两种方法最终都会在客户端的浏览器中存储一些数据(但不是很多,因为cookie是由浏览器通过每个请求传递的)。

答案 2 :(得分:0)

你可以将它放在一个表中 - 只是为了你拥有它,然后通过ApplicationContoller使值可用,其间有一个简单的缓存方法

所以类似: - 未经测试!!

saveState()

您必须创建一个模型,或者您可以通过带有set_mode方法的控制器进行更新,但这样会更短暂。

然后你可以从你的控制器调用get_mode。