gpt4 book ai didi

ruby-on-rails - 使用 Ruby on Rails 管理实时配置变量的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 07:06:00 26 4
gpt4 key购买 nike

我知道 YAML 和 Rails-settings 之类的插件,但是对于需要实时更改的配置设置,这些都没有用。

例如,假设我将 MAX_ALLOWED_REGISTERED_USERS 设置为 2000,但我想将其提高到 2300。对于典型的“配置”或 YAML 解决方案,这将涉及更改配置文件并重新部署。我更喜欢数据库支持的 RESTful 方法,我可以在其中更改键/值对。

想法?

最佳答案

我使用与此类似的配置模型:

# == Schema Information
# Schema version: 20081015233653
#
# Table name: configurations
#
# id :integer not null, primary key
# name :string(20) not null
# value :string(255)
# description :text
#

class InvalidConfigurationSym < StandardError; end

class Configuration < ActiveRecord::Base
TRUE = "t"
FALSE = "f"

validates_presence_of :name
validates_uniqueness_of :name
validates_length_of :name, :within => 3..20

# Enable hash-like access to table for ease of use.
# Raises InvalidConfigurationSym when key isn't found.
# Example:
# Configuration[:max_age] => 80
def self.[](key)
rec = self.find_by_name(key.to_s)
if rec.nil?
raise InvalidConfigurationSym, key.to_s
end
rec.value
end

# Override self.method_missing to allow
# instance attribute type access to Configuration
# table. This helps with forms.
def self.method_missing(method, *args)
unless method.to_s.include?('find') # skip AR find methods
value = self[method]
return value unless value.nil?
end
super(method, args)
end
end

这是我如何使用它:
class Customer < ActiveRecord::Base
validate :customer_is_old_enough?

def customer_is_old_enough?
min_age = Date.today << (Configuration[:min_age].to_i * 12)
self.errors.add(:dob, "is not old enough") unless self.dob < min_age
end
end

我不太满意的一件事是必须调用 #to_i就像在示例中一样,但由于到目前为止它对我有用,因此我没有过多考虑重新设计它。

关于ruby-on-rails - 使用 Ruby on Rails 管理实时配置变量的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com