代码之家  ›  专栏  ›  技术社区  ›  sarunw

保持web应用程序配置的最佳方法是什么?

  •  1
  • sarunw  · 技术社区  · 15 年前

    如果我有一些web管理员的配置来设置,例如每页的文章数,一些枚举显示选择。如何将此设置保留在数据库中?我应该序列化它并保存为blob吗?

    谢谢,


    我使用rails,希望它通过web界面动态地更改这个设置,所以我认为environment.rb不适合这种情况。所以我应该有一个额外的表,两个元组作为名称,值?

    6 回复  |  直到 15 年前
        1
  •  1
  •   John Topley    15 年前

    大多数语言/框架都有一个排序的配置文件。例如asp中的web.config或ror中的environment.rb文件。你可以用这个。

    或者在数据库中有一个键值对表。

    如果你想通过网站动态地完成这项工作,我肯定会选择key-value-pair表。

        2
  •  1
  •   MattMcKnight    15 年前

    对于动态配置值,应该使用键和值创建一个名为configuration的模型。我通常有多个值列(用于数字、字符串和日期),然后为配置调用适当的方法。

    对于“枚举”,您应该创建具有外键关系的查找表。例如,如果您有一个post模型,并且想要一个类别的枚举,那么您应该使 Post belong_to :category Category has_many :posts .

        3
  •  1
  •   TK.    15 年前

    使用yaml文件。yaml比xml简单得多。

    在“config”目录中创建一个名为“config.yml”的文件。并使用yaml::load()加载文件。您可以通过将第一个级别命名为environment(例如,production、development、test)来为每个环境进行设置。

    this episode of RailsCasts for details .

        4
  •  0
  •   Adriaan Stander    15 年前

    如果您使用的是asp.net,则可以使用web.config文件。

    Asp .net Web.config Configuration File

        5
  •  0
  •   Rubens Farias    15 年前

    您可以在数据库中创建一个表来存储键值对。

        6
  •  0
  •   Steve Graham    15 年前

    这是我用的。从其他地方得到了这个想法,但是实现是我的。从矿山生产项目中提取:

    class AppConfig
      # Loads a YAML configuration file from RAILS_ROOT/config/. The default file
      # it looks for is 'application.yml', although if this doesn't match your
      # application, you can pass in an alternative value as an argument 
      # to AppConfig.load.
      # After the file has been loaded, any inline ERB is evaluated and unserialized
      # into a hash. For each key-value pair in the hash, class getter and setter methods
      # are defined i.e., AppConfig.key => "value" 
      # This allows you to store your application configuration information e.g., API keys and 
      # authentication credentials in a convenient manner, external to your application source
      #
      # application.yml example
      #
      # :defaults: &defaults
      #  :app_name: Platform
      #  :app_domain: dev.example.com
      #  :admin_email: admin@example.com
      # :development:
      #  <<: *defaults
      # :test:
      #  <<: *defaults
      # :production:
      #  <<: *defaults
      #  :app_domain: example.com
      #
      # For example will result in AppConfig.app_domain => "dev.example.com"
      # when Rails.env == "development" 
      #
    
      class << self
        def load(file='application.yml')
          configuration_file = File.join Rails.root, 'config', file
          File.open(configuration_file) do |configuration|
            configuration = ERB.new(configuration.read).result
            configuration = YAML.load(configuration)[Rails.env.to_sym]
            configuration.each do |key, value|
              cattr_accessor key
              send "#{key}=", value
            end
          end if File.exists? configuration_file
        end
      end
    end
    AppConfig.load
    

    创造 config/initializers/app_config.rb 把上面的代码粘贴进去。我要把它做成宝石。我想其他人会觉得它有用。

    编辑: 刚刚看到你希望在应用程序通过基于web的界面运行时编辑配置。可以使用此方法执行此操作,因为为每个属性都定义了getter和setter方法。

    在控制器中:

    def update
      params[:configuration].each { |k,v| AppConfig.send "#{k}=", v }
      …
    end
    

    我不认为模型是正确的解决方案。忘了db偷听,能够实例化一些控制应用程序配置的东西是没有意义的。还有什么是如何实现的呢?每个元组的一个实例?!应该是一个单子类。