0.0
No release in over 3 years
Low commit activity in last 3 years
Server Configuration logic for any where
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.7
~> 10.0
>= 0

Runtime

 Project Readme

ServerSettings

ServerSettings is useful configuration scheme for any where.

Installation

Add this line to your application's Gemfile:

gem 'server_settings'

And then execute:

$ bundle

Or install it yourself as:

$ gem install server_settings

Usage

Prepare

First of all, you must define servers and role in YAML

(rolename):
  (option_param): (option_value)
  (...)
  hosts:
    - host1
    - host2

Then, You can load yaml files.

require 'server_settings'

ServerSettings.load_config("path/to/yaml")

Load from directory

If you have many roles and servers, you can split yaml file and put into directory.

ServerSettings.load_config_dir("path/to/yamls-dir/*.yml")

Render YAML with ERB

When your server configuration has dynamic parameter, you can use ERB syntax in yaml.

load_config_dir() will rendering ERB template every time. Or load_from_yaml_erb() also rendering ERB for yaml content

For Dalli

memcached_servers:
  port: 11211
  hosts:
    - 192.168.100.1
    - 192.168.100.2
ServerSettings.load_config("config/production/server-config.yaml")

ActiveSupport::Cache::DalliStore.new ServerSettings.memcached_servers.with_format("%host:%port"), options

For Resque host

redis_endpoint:
  port: 6379
  hosts:
   - 192.168.100.1

When hosts have single record, host accessor return string value instend of Array.

Resque.redis = ServerSettings.redis_endpoint.with_format("%host:%port")

For DB

databases:
  :adapter: mysql2
  :encoding: utf8
  :reconnect: true
  :database: app
  :pool: 10
  :username: db_user1
  :password: db_pass1
  :master: 192.168.30.86
  :backup: 192.168.30.85
  db1:
    :database: app_db1
    :master: 192.168.30.86
    :backup: 192.168.30.85
    :slaves: [  192.168.30.87, 192.168.30.88 ]
  group1:
    db2:
      :master: 192.168.30.86
      :backup: 192.168.30.85

Access DB configuration

ServerSettings.load_config("config/production/server-config.yaml")

ServerSettings.databases.find("db1").config(:master)
# => {:adapter=>"mysql2", :encoding=>"utf8", :reconnect=>true, :database=>"app_db1", :pool=>10, :username=>"db_user1", :password=>"db_pass1", :host=>"192.168.30.86"}
ServerSettings.databases.find("db1").config(:backup)
# => {:adapter=>"mysql2", :encoding=>"utf8", :reconnect=>true, :database=>"app_db1", :pool=>10, :username=>"db_user1", :password=>"db_pass1", :host=>"192.168.30.85"}
ServerSettings.databases.find("db1").config(:slaves)
# =>[ {:adapter=>"mysql2", :encoding=>"utf8", :reconnect=>true, :database=>"app_db1", :pool=>10, :username=>"db_user1", :password=>"db_pass1", :host=>"192.168.30.87"},
# {:adapter=>"mysql2", :encoding=>"utf8", :reconnect=>true, :database=>"app_db1", :pool=>10, :username=>"db_user1", :password=>"db_pass1", :host=>"192.168.30.88"}]

Iterator for all db config

ServerSettings.load_config("config/production/server-config.yaml")

ServerSettings.databases.each do |db|
  db.master      # => 192.168.30.86
  db.backup      # => 192.168.30.85
  db.slaves      # => [ 192.168.30.87, 192.168.30.88 ]
  db.has_slave?  # => true
  db.settings    # => {:adapter=>"mysql2", :encoding=>"utf8", :reconnect=>true, :database=>"app_db1", :pool=>10, :username=>"db_user1", :password=>"db_pass1"}
end

Tasks for mysql

If you use Rails, ServerSettings define following tasks.

rake server_settings:db:create:execute  # Confirm and execute CREATE DATABASE for each new database
rake server_settings:db:create:status   # Show status of new databases not created yet
rake server_settings:db:drop            # Confirm and execute Drop DATABASE for all database

If not use Rails, you writes in Rakefile as follows, define tasks.

require 'server_settings/tasks'

For Rails

When use Rails, place yaml file in the following pattern.

ServerSettings autoload this yaml file and define roles.

#{Rails.root}/config/servers/#{Rails.env}/*.yml

For Capistrano

Capistrano2

require  'server_settings/capistrano'

load_servers("config/production/*.yaml")


When want to use `no_release`, `primary`, `active` role option, described as follow.

memcached:
  no_release: true
  hosts:
    - 192.168.100.1

For Capistrano3

in Capfile

require "capistrano/server_settings"

in deploy.rb

load_servers("config/production/*.yaml")

For other application configuration

ServerSettings.load_config("config/production/server-config.yaml")
ServerSettings.each_role do |role, config|
  puts "#{role}, #{config.hosts}"
end
puts ServerSettings.memcached_servers.to_a

Contributing

  1. Fork it ( https://github.com/monsterstrike/server_settings/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request