hancock_cms 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +113 -0
- data/Rakefile +1 -0
- data/app/assets/images/devices/login-bg.jpg +0 -0
- data/app/assets/images/rails-admin/hancock_logo.svg +5 -0
- data/app/assets/javascripts/hancock/app/back_to_top.coffee +24 -0
- data/app/assets/javascripts/hancock/cms.coffee +11 -0
- data/app/assets/javascripts/hancock/cms/flash.coffee +3 -0
- data/app/assets/javascripts/hancock/cms/init.coffee +1 -0
- data/app/assets/javascripts/hancock/cms/map.coffee +22 -0
- data/app/assets/javascripts/hancock/rails_admin/cms.ui.coffee +43 -0
- data/app/assets/javascripts/hancock/rails_admin/custom/ui.coffee +0 -0
- data/app/assets/javascripts/head.load.js +707 -0
- data/app/assets/javascripts/jquery.placeholder.js +157 -0
- data/app/assets/javascripts/rails_admin/custom/ui.coffee +2 -0
- data/app/assets/stylesheets/hancock/cms.sass +9 -0
- data/app/assets/stylesheets/hancock/cms/devise.sass +157 -0
- data/app/assets/stylesheets/hancock/cms/flash.sass +69 -0
- data/app/assets/stylesheets/hancock/cms/mixins.sass +98 -0
- data/app/assets/stylesheets/hancock/cms/normalize.scss +407 -0
- data/app/assets/stylesheets/hancock/cms/powered.sass +18 -0
- data/app/assets/stylesheets/hancock/rails_admin/cms.theming.sass +703 -0
- data/app/assets/stylesheets/hancock/rails_admin/custom/theming.sass +1 -0
- data/app/assets/stylesheets/hancock/toplink/toplink.sass +24 -0
- data/app/assets/stylesheets/rails_admin/custom/theming.sass +4 -0
- data/app/controllers/concerns/hancock/current_user.rb +12 -0
- data/app/controllers/concerns/hancock/decorators/home.rb +12 -0
- data/app/controllers/concerns/hancock/decorators/registrations.rb +5 -0
- data/app/controllers/concerns/hancock/decorators/sessions.rb +5 -0
- data/app/controllers/concerns/hancock/errors.rb +94 -0
- data/app/controllers/concerns/hancock/fancybox.rb +14 -0
- data/app/controllers/concerns/hancock/no_cache.rb +12 -0
- data/app/controllers/hancock/home_controller.rb +10 -0
- data/app/controllers/hancock/registrations_controller.rb +23 -0
- data/app/controllers/hancock/sessions_controller.rb +24 -0
- data/app/helpers/hancock/gzip_helper.rb +27 -0
- data/app/helpers/hancock/home_helper.rb +2 -0
- data/app/helpers/hancock/powered_helper.rb +42 -0
- data/app/models/concerns/hancock/boolean_field.rb +21 -0
- data/app/models/concerns/hancock/cacheable.rb +33 -0
- data/app/models/concerns/hancock/decorators/embedded_element.rb +28 -0
- data/app/models/concerns/hancock/enableable.rb +8 -0
- data/app/models/concerns/hancock/geocodeable.rb +4 -0
- data/app/models/concerns/hancock/hash_field.rb +113 -0
- data/app/models/concerns/hancock/html_field.rb +33 -0
- data/app/models/concerns/hancock/mappable.rb +91 -0
- data/app/models/concerns/hancock/model_localizeable.rb +33 -0
- data/app/models/concerns/hancock/rails_admin_patch.rb +86 -0
- data/app/models/concerns/hancock/sort_field.rb +20 -0
- data/app/models/concerns/hancock/sortable.rb +8 -0
- data/app/models/hancock/embedded_element.rb +17 -0
- data/app/views/blocks/_favicon.html.slim +60 -0
- data/app/views/blocks/_footer.html.slim +1 -0
- data/app/views/blocks/_header.html.slim +3 -0
- data/app/views/devise/passwords/edit.html.slim +29 -0
- data/app/views/devise/passwords/new.html.slim +19 -0
- data/app/views/devise/registrations/edit.html.slim +31 -0
- data/app/views/devise/registrations/new.html.slim +39 -0
- data/app/views/devise/sessions/new.html.slim +39 -0
- data/app/views/devise/shared/_links.html.slim +11 -0
- data/app/views/hancock/errors/_base.html.slim +3 -0
- data/app/views/hancock/errors/error_403.html.slim +1 -0
- data/app/views/hancock/errors/error_404.html.slim +1 -0
- data/app/views/hancock/errors/error_500.html.slim +1 -0
- data/app/views/hancock/home/index.html.slim +1 -0
- data/app/views/hancock/simple_captcha/_simple_captcha.html.slim +13 -0
- data/app/views/hancock/toplink/_toplink.html.slim +2 -0
- data/app/views/layouts/application.html.slim +35 -0
- data/app/views/layouts/hancock/devise/confirmations.html.slim +22 -0
- data/app/views/layouts/hancock/devise/passwords.html.slim +22 -0
- data/app/views/layouts/hancock/devise/registrations.html.slim +22 -0
- data/app/views/layouts/hancock/devise/sessions.html.slim +22 -0
- data/app/views/layouts/hancock/devise/unlocks.html.slim +22 -0
- data/app/views/layouts/rails_admin/_footer.html.slim +2 -0
- data/app/views/layouts/rails_admin/_footer_navigation.html.slim +20 -0
- data/app/views/layouts/rails_admin/_navigation.html.slim +73 -0
- data/app/views/layouts/rails_admin/_secondary_navigation.html.slim +32 -0
- data/app/views/layouts/rails_admin/application.html.haml +68 -0
- data/app/views/layouts/rails_admin/pjax.html.haml +17 -0
- data/app/views/rails_admin/main/_check_boxes.html.slim +27 -0
- data/app/views/rails_admin/main/_enum_check_boxes.html.slim +5 -0
- data/app/views/rails_admin/main/_enum_radio_buttons.html.slim +5 -0
- data/app/views/rails_admin/main/_form_hancock_multiselect.html.slim +48 -0
- data/app/views/rails_admin/main/_form_raw.html.slim +1 -0
- data/app/views/rails_admin/main/_hancock_hash.html.slim +9 -0
- data/app/views/rails_admin/main/_hancock_hash_ml.html.slim +10 -0
- data/app/views/rails_admin/main/_hancock_html.html.slim +16 -0
- data/app/views/rails_admin/main/_hancock_html_ml.html.slim +53 -0
- data/app/views/shared/_admin_link.html.slim +3 -0
- data/app/views/shared/_messages.html.slim +7 -0
- data/config/initializers/embedded_findable.rb +57 -0
- data/config/initializers/hancock_cms.rb +11 -0
- data/config/initializers/simple_captcha.rb +70 -0
- data/config/locales/en.hancock.yml +29 -0
- data/config/locales/en.hancock_admin.yml +6 -0
- data/config/locales/ru.cancan.yml +4 -0
- data/config/locales/ru.devise.yml +65 -0
- data/config/locales/ru.hancock.yml +36 -0
- data/config/locales/ru.hancock_admin.yml +6 -0
- data/config/locales/ru.models.yml +82 -0
- data/config/locales/ru.mongoid.yml +450 -0
- data/config/locales/ru.rails_admin.yml +168 -0
- data/hancock_cms.gemspec +46 -0
- data/lib/filename_to_slug.rb +32 -0
- data/lib/generators/hancock/cms/ability_generator.rb +14 -0
- data/lib/generators/hancock/cms/admin_generator.rb +21 -0
- data/lib/generators/hancock/cms/application_generator.rb +14 -0
- data/lib/generators/hancock/cms/assets_generator.rb +35 -0
- data/lib/generators/hancock/cms/config_generator.rb +13 -0
- data/lib/generators/hancock/cms/controllers/decorators_generator.rb +27 -0
- data/lib/generators/hancock/cms/gemfile_generator.rb +13 -0
- data/lib/generators/hancock/cms/layout_generator.rb +14 -0
- data/lib/generators/hancock/cms/model_generator.rb +39 -0
- data/lib/generators/hancock/cms/models/embedded_element_generator.rb +56 -0
- data/lib/generators/hancock/cms/models/templates/embedded_element.erb +47 -0
- data/lib/generators/hancock/cms/paperclip_optimizer_generator.rb +13 -0
- data/lib/generators/hancock/cms/rack_generator.rb +12 -0
- data/lib/generators/hancock/cms/robots_generator.rb +14 -0
- data/lib/generators/hancock/cms/scripts_generator.rb +31 -0
- data/lib/generators/hancock/cms/templates/Gemfile.erb +69 -0
- data/lib/generators/hancock/cms/templates/ability.erb +49 -0
- data/lib/generators/hancock/cms/templates/admin.erb +74 -0
- data/lib/generators/hancock/cms/templates/application.erb +42 -0
- data/lib/generators/hancock/cms/templates/assets/javascripts/application.coffee.erb +5 -0
- data/lib/generators/hancock/cms/templates/assets/stylesheets/application.sass.erb +88 -0
- data/lib/generators/hancock/cms/templates/hancock_cms.erb +30 -0
- data/lib/generators/hancock/cms/templates/model.erb +42 -0
- data/lib/generators/hancock/cms/templates/paperclip_optimizer.erb +80 -0
- data/lib/generators/hancock/cms/templates/rack.erb +15 -0
- data/lib/generators/hancock/cms/templates/robots.txt.erb +5 -0
- data/lib/generators/hancock/cms/templates/scripts/assets_precompile.sh +3 -0
- data/lib/generators/hancock/cms/templates/scripts/bundle_production.sh +4 -0
- data/lib/generators/hancock/cms/templates/scripts/db_dump.sh.erb +3 -0
- data/lib/generators/hancock/cms/templates/scripts/db_restore.sh +3 -0
- data/lib/generators/hancock/cms/templates/scripts/full_assets_precompile.sh +4 -0
- data/lib/generators/hancock/cms/templates/scripts/restart_thru_kill.sh +3 -0
- data/lib/generators/hancock/cms/templates/scripts/send_hup.sh +3 -0
- data/lib/generators/hancock/cms/templates/scripts/send_usr2.sh +3 -0
- data/lib/generators/hancock/cms/templates/scripts/server.sh +5 -0
- data/lib/generators/hancock/cms/templates/scripts/server_alt.sh +5 -0
- data/lib/generators/hancock/cms/templates/unicorn.erb +57 -0
- data/lib/generators/hancock/cms/templates/unicorn.god.erb +59 -0
- data/lib/generators/hancock/cms/unicorn_god_generator.rb +15 -0
- data/lib/generators/hancock/cms/utils.rb +21 -0
- data/lib/hancock/admin.rb +60 -0
- data/lib/hancock/admin/embedded_element.rb +26 -0
- data/lib/hancock/configuration.rb +48 -0
- data/lib/hancock/controller.rb +30 -0
- data/lib/hancock/engine.rb +48 -0
- data/lib/hancock/migration.rb +15 -0
- data/lib/hancock/model.rb +53 -0
- data/lib/hancock/models/embedded_element.rb +12 -0
- data/lib/hancock/models/mongoid/embedded_element.rb +14 -0
- data/lib/hancock/plugin.rb +25 -0
- data/lib/hancock/plugin_configuration.rb +30 -0
- data/lib/hancock/rails_admin_ext/config.rb +129 -0
- data/lib/hancock/rails_admin_ext/hancock_hash.rb +84 -0
- data/lib/hancock/rails_admin_ext/hancock_html.rb +79 -0
- data/lib/hancock/rails_admin_ext/hancock_multiselect.rb +44 -0
- data/lib/hancock/rails_admin_ext/hancock_slugs.rb +35 -0
- data/lib/hancock/rails_admin_ext/patches/field_patch.rb +14 -0
- data/lib/hancock/rails_admin_ext/patches/group_patch.rb +41 -0
- data/lib/hancock/rails_admin_ext/patches/hancock_cms_group.rb +61 -0
- data/lib/hancock/rails_admin_ext/patches/new_controller_patch.rb +54 -0
- data/lib/hancock/routes.rb +20 -0
- data/lib/hancock/simple_form_patch.rb +12 -0
- data/lib/hancock/tasks.rb +13 -0
- data/lib/hancock/version.rb +3 -0
- data/lib/hancock_cms.rb +130 -0
- data/lib/manual_slug.rb +10 -0
- data/lib/manual_slug/active_record.rb +32 -0
- data/lib/manual_slug/mongoid.rb +40 -0
- data/lib/rails_admin/custom_show_in_app.rb +43 -0
- data/release.sh +12 -0
- data/template.rb +564 -0
- metadata +455 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
Hancock.configure do |config|
|
2
|
+
##### defaults #####
|
3
|
+
# config.main_index_layout = 'application'
|
4
|
+
# config.error_layout = 'application'
|
5
|
+
#
|
6
|
+
# config.localize = false
|
7
|
+
#
|
8
|
+
# config.ability_manager_config = []
|
9
|
+
### example ###
|
10
|
+
# config.ability_manager_config << {
|
11
|
+
# method: :can,
|
12
|
+
# model: RailsAdminSettings::Setting,
|
13
|
+
# actions: [:edit, :update]
|
14
|
+
# }
|
15
|
+
### example ###
|
16
|
+
# config.ability_admin_config = []
|
17
|
+
# config.ability_admin_config << {
|
18
|
+
# method: :can,
|
19
|
+
# model: RailsAdminSettings::Setting,
|
20
|
+
# actions: :manage
|
21
|
+
# }
|
22
|
+
#
|
23
|
+
# config.recaptcha_support = defined?(Recaptcha)
|
24
|
+
# config.simple_captcha_support = defined?(SimpleCaptcha)
|
25
|
+
#
|
26
|
+
# config.admin_enter_captcha = config.recaptcha_support or config.simple_captcha_support
|
27
|
+
# config.registration_captcha = config.admin_enter_captcha
|
28
|
+
#
|
29
|
+
# config.captcha_on_development = false
|
30
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class <%= camelcased_class_name %>
|
2
|
+
include Hancock::Model
|
3
|
+
# include Hancock::Enableable
|
4
|
+
# include Hancock::Cacheable
|
5
|
+
# include ManualSlug
|
6
|
+
|
7
|
+
# acts_as_nested_set
|
8
|
+
# scope :sorted, -> { order_by([:lft, :asc]) }
|
9
|
+
|
10
|
+
field :name
|
11
|
+
# manual_slug :name
|
12
|
+
|
13
|
+
# def self.default_cache_keys
|
14
|
+
# []
|
15
|
+
# end
|
16
|
+
|
17
|
+
############# rails_admin ##############
|
18
|
+
#
|
19
|
+
# def self.admin_can_user_defined_actions
|
20
|
+
# [].freeze
|
21
|
+
# end
|
22
|
+
# def self.admin_cannot_user_defined_actions
|
23
|
+
# [].freeze
|
24
|
+
# end
|
25
|
+
# def self.manager_can_user_defined_actions
|
26
|
+
# [].freeze
|
27
|
+
# end
|
28
|
+
# def self.manager_cannot_user_defined_actions
|
29
|
+
# [].freeze
|
30
|
+
# end
|
31
|
+
# def self.rails_admin_user_defined_visible_actions
|
32
|
+
# [].freeze
|
33
|
+
# end
|
34
|
+
|
35
|
+
rails_admin do
|
36
|
+
# field :enabled, :toggle
|
37
|
+
field :name
|
38
|
+
# group :url, &Hancock::Admin.url_block
|
39
|
+
# group :cache, &Hancock::Admin.caching_block
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# Set global optimisation options for all Paperclip models
|
2
|
+
|
3
|
+
# By default, image_optim enables all the compression binaries it supports and
|
4
|
+
# requires them to be present on your system, failing if one is actually missing.
|
5
|
+
|
6
|
+
# We disable everything by default and ignore missing ones with `skip_missing_workers`.
|
7
|
+
# This way, should a new version add support for a library we do not yet disable here,
|
8
|
+
# things won't suddenly break.
|
9
|
+
if defined?(Paperclip::PaperclipOptimizer)
|
10
|
+
Paperclip::PaperclipOptimizer.default_options = {
|
11
|
+
skip_missing_workers: true,
|
12
|
+
advpng: true,
|
13
|
+
gifsicle: true,
|
14
|
+
jhead: true,
|
15
|
+
jpegoptim: true,
|
16
|
+
jpegrecompress: true,
|
17
|
+
jpegtran: true,
|
18
|
+
optipng: true,
|
19
|
+
pngcrush: true,
|
20
|
+
pngout: false,
|
21
|
+
pngquant: true,
|
22
|
+
svgo: false,
|
23
|
+
|
24
|
+
nice: 5,
|
25
|
+
verbose: true
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
# All available image_optim options. See https://github.com/toy/image_optim for more information
|
30
|
+
|
31
|
+
# Paperclip::PaperclipOptimizer.default_options = {
|
32
|
+
# skip_missing_workers: false, # Skip workers with missing or problematic binaries (defaults to false)
|
33
|
+
# nice: 10, # Nice level (defaults to 10)
|
34
|
+
# threads: 1, # Number of threads or disable (defaults to number of processors)
|
35
|
+
# verbose: false, # Verbose output (defaults to false)
|
36
|
+
# pack: nil, # Require image_optim_pack or disable it, by default image_optim_pack will be used if available,
|
37
|
+
# # will turn on :skip-missing-workers unless explicitly disabled (defaults to nil)
|
38
|
+
# allow_lossy: false, # Allow lossy workers and optimizations (defaults to false)
|
39
|
+
# advpng: {
|
40
|
+
# leve: 4 # Compression level: 0 - don't compress, 1 - fast, 2 - normal, 3 - extra, 4 - extreme (defaults to 4)
|
41
|
+
# },
|
42
|
+
# gifsicle: {
|
43
|
+
# interlace: true, # Interlace: true - interlace on, false - interlace off, nil - as is in original image
|
44
|
+
# # (defaults to running two instances, one with interlace off and one with on)
|
45
|
+
# level: 3, # Compression level: 1 - light and fast, 2 - normal, 3 - heavy (slower) (defaults to 3)
|
46
|
+
# careful: false # Avoid bugs with some software (defaults to false)
|
47
|
+
# },
|
48
|
+
# jhead: true, # no options
|
49
|
+
# jpegoptim: {
|
50
|
+
# strip: :all, # List of extra markers to strip: :comments, :exif, :iptc, :icc or :all (defaults to :all)
|
51
|
+
# max_quality: 100 # Maximum image quality factor 0..100 (defaults to 100)
|
52
|
+
# },
|
53
|
+
# jpegrecompress: {
|
54
|
+
# quality: 3 # JPEG quality preset: 0 - low, 1 - medium, 2 - high, 3 - veryhigh (defaults to 3)
|
55
|
+
# },
|
56
|
+
# jpegtran: {
|
57
|
+
# copy_chunks: false, # Copy all chunks (defaults to false)
|
58
|
+
# progressive: true, # Create progressive JPEG file (defaults to true)
|
59
|
+
# jpegrescan: false # Use jpegtran through jpegrescan, ignore progressive option (defaults to false)
|
60
|
+
# },
|
61
|
+
# optipng: {
|
62
|
+
# level: 6, # Optimization level preset: 0 is least, 7 is best (defaults to 6)
|
63
|
+
# interlace: false # Interlace: true - interlace on, false - interlace off, nil - as is in original image (defaults to false)
|
64
|
+
# },
|
65
|
+
# pngcrush: {
|
66
|
+
# chunks: :alla, # List of chunks to remove or :alla - all except tRNS/transparency or
|
67
|
+
# # :allb - all except tRNS and gAMA/gamma (defaults to :alla)
|
68
|
+
# fix: false, # Fix otherwise fatal conditions such as bad CRCs (defaults to false)
|
69
|
+
# brute: false # Brute force try all methods, very time-consuming and generally not worthwhile (defaults to false)
|
70
|
+
# },
|
71
|
+
# pngout: {
|
72
|
+
# copy_chunks: false, # Copy optional chunks (defaults to false)
|
73
|
+
# strategy: 0 # Strategy: 0 - xtreme, 1 - intense, 2 - longest Match, 3 - huffman Only, 4 - uncompressed (defaults to 0)
|
74
|
+
# },
|
75
|
+
# pngquant: {
|
76
|
+
# quality: 100..100, # min..max - don't save below min, use less colors below max (both in range 0..100; in yaml - !ruby/range 0..100) (defaults to 100..100)
|
77
|
+
# speed: 3 # speed/quality trade-off: 1 - slow, 3 - default, 11 - fast & rough (defaults to 3)
|
78
|
+
# },
|
79
|
+
# svgo: true # no options
|
80
|
+
# }
|
@@ -0,0 +1,15 @@
|
|
1
|
+
if Rails.env.development?
|
2
|
+
module Rack
|
3
|
+
class CommonLogger
|
4
|
+
alias_method :log_without_assets, :log
|
5
|
+
ASSETS_PREFIX = "/#{Rails.application.config.assets.prefix[/\A\/?(.*?)\/?\z/, 1]}/"
|
6
|
+
def log(env, status, header, began_at)
|
7
|
+
unless env['REQUEST_PATH'].start_with?(ASSETS_PREFIX) || env['REQUEST_PATH'].start_with?('/uploads') || env['REQUEST_PATH'].start_with?('/system')
|
8
|
+
log_without_assets(env, status, header, began_at)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Rack::Utils.multipart_part_limit = 0
|
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
rails_root = "/home/<%= app_name.downcase %>/www/<%= app_name.downcase %>"
|
3
|
+
|
4
|
+
worker_processes 2
|
5
|
+
working_directory rails_root
|
6
|
+
|
7
|
+
# This loads the application in the master process before forking
|
8
|
+
# worker processes
|
9
|
+
# Read more about it here:
|
10
|
+
# http://unicorn.bogomips.org/Unicorn/Configurator.html
|
11
|
+
preload_app true
|
12
|
+
|
13
|
+
timeout 30
|
14
|
+
|
15
|
+
# This is where we specify the socket.
|
16
|
+
# We will point the upstream Nginx module to this socket later on
|
17
|
+
listen "#{rails_root}/tmp/sockets/unicorn.sock", :backlog => 64
|
18
|
+
|
19
|
+
pid "#{rails_root}/tmp/pids/unicorn.pid"
|
20
|
+
|
21
|
+
# Set the path of the log files inside the log folder of the testapp
|
22
|
+
stderr_path "#{rails_root}/log/unicorn.stderr.log"
|
23
|
+
stdout_path "#{rails_root}/log/unicorn.stdout.log"
|
24
|
+
|
25
|
+
|
26
|
+
before_fork do |server, worker|
|
27
|
+
server.logger.info("worker=#{worker.nr} spawning in #{Dir.pwd}")
|
28
|
+
|
29
|
+
# graceful shutdown.
|
30
|
+
old_pid_file = "#{rails_root}/tmp/pids/unicorn.pid.oldbin"
|
31
|
+
if File.exists?(old_pid_file) && server.pid != old_pid_file
|
32
|
+
begin
|
33
|
+
old_pid = File.read(old_pid_file).to_i
|
34
|
+
server.logger.info("sending QUIT to #{old_pid}")
|
35
|
+
# we're killing old unicorn master right there
|
36
|
+
Process.kill("QUIT", old_pid)
|
37
|
+
rescue Errno::ENOENT, Errno::ESRCH
|
38
|
+
# someone else did our job for us
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
## no need for noSQL
|
44
|
+
# before_fork do |server, worker|
|
45
|
+
# # This option works in together with preload_app true setting
|
46
|
+
# # What is does is prevent the master process from holding
|
47
|
+
# # the database connection
|
48
|
+
# defined?(ActiveRecord::Base) and
|
49
|
+
# ActiveRecord::Base.connection.disconnect!
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
# after_fork do |server, worker|
|
53
|
+
# # Here we are establishing the connection after forking worker
|
54
|
+
# # processes
|
55
|
+
# defined?(ActiveRecord::Base) and
|
56
|
+
# ActiveRecord::Base.establish_connection
|
57
|
+
# end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# http://unicorn.bogomips.org/SIGNALS.html
|
2
|
+
|
3
|
+
rails_env = ENV['RAILS_ENV'] || 'production'
|
4
|
+
rails_root = ENV['RAILS_ROOT'] || File.dirname(File.dirname(__FILE__))
|
5
|
+
|
6
|
+
God.watch do |w|
|
7
|
+
w.name = "unicorn_<%= app_name.downcase %>"
|
8
|
+
w.interval = 30.seconds # default
|
9
|
+
|
10
|
+
# unicorn needs to be run from the rails root
|
11
|
+
w.start = "cd #{rails_root} && unicorn -c #{rails_root}/config/unicorn.rb -E #{rails_env} -D"
|
12
|
+
|
13
|
+
# QUIT gracefully shuts down workers
|
14
|
+
w.stop = "kill -KILL `cat #{rails_root}/tmp/pids/unicorn.pid`"
|
15
|
+
|
16
|
+
# USR2 causes the master to re-create itself and spawn a new worker pool
|
17
|
+
w.restart = "kill -USR2 `cat #{rails_root}/tmp/pids/unicorn.pid`"# && cd #{rails_root} && unicorn -c #{rails_root}/config/unicorn.rb -E #{rails_env} -D"
|
18
|
+
|
19
|
+
w.start_grace = 10.seconds
|
20
|
+
w.restart_grace = 10.seconds
|
21
|
+
w.pid_file = "#{rails_root}/tmp/pids/unicorn.pid"
|
22
|
+
|
23
|
+
w.uid = '<%= app_name.downcase %>'
|
24
|
+
w.gid = '<%= app_name.downcase %>'
|
25
|
+
|
26
|
+
w.behavior(:clean_pid_file)
|
27
|
+
|
28
|
+
w.start_if do |start|
|
29
|
+
start.condition(:process_running) do |c|
|
30
|
+
c.interval = 5.seconds
|
31
|
+
c.running = false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
w.restart_if do |restart|
|
36
|
+
restart.condition(:memory_usage) do |c|
|
37
|
+
c.above = 150.megabytes
|
38
|
+
c.times = [3, 5] # 3 out of 5 intervals
|
39
|
+
end
|
40
|
+
|
41
|
+
restart.condition(:cpu_usage) do |c|
|
42
|
+
c.above = 50.percent
|
43
|
+
c.times = 5
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# lifecycle
|
48
|
+
w.lifecycle do |on|
|
49
|
+
on.condition(:flapping) do |c|
|
50
|
+
c.to_state = [:start, :restart]
|
51
|
+
c.times = 5
|
52
|
+
c.within = 5.minute
|
53
|
+
c.transition = :unmonitored
|
54
|
+
c.retry_in = 10.minutes
|
55
|
+
c.retry_times = 5
|
56
|
+
c.retry_within = 2.hours
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Hancock::Cms
|
4
|
+
class UnicornGodGenerator < Rails::Generators::Base
|
5
|
+
source_root File.expand_path('../templates', __FILE__)
|
6
|
+
|
7
|
+
argument :app_name, type: :string
|
8
|
+
|
9
|
+
desc 'Hancock CMS unicorn+god configs generator'
|
10
|
+
def install
|
11
|
+
template 'unicorn.erb', "config/unicorn.rb"
|
12
|
+
template 'unicorn.god.erb', "config/unicorn.god"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# shamelessly stolen from https://github.com/sferik/rails_admin/blob/master/lib/generators/rails_admin/utils.rb
|
2
|
+
|
3
|
+
module Hancock::Cms
|
4
|
+
module Generators
|
5
|
+
module Utils
|
6
|
+
module InstanceMethods
|
7
|
+
def display(output, color = :green)
|
8
|
+
say(" - #{output}", color)
|
9
|
+
end
|
10
|
+
|
11
|
+
def ask_for(wording, default_value = nil, override_if_present_value = nil)
|
12
|
+
if override_if_present_value.present?
|
13
|
+
display("Using [#{override_if_present_value}] for question '#{wording}'") && override_if_present_value
|
14
|
+
else
|
15
|
+
ask(" ? #{wording} Press <enter> for [#{default_value}] >", :yellow).presence || default_value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Hancock
|
2
|
+
module Admin
|
3
|
+
def self.map_config(is_active = false)
|
4
|
+
Proc.new {
|
5
|
+
active is_active
|
6
|
+
label I18n.t('hancock.map')
|
7
|
+
field :address, :string
|
8
|
+
field :map_address, :string
|
9
|
+
field :map_hint, :string
|
10
|
+
field :coordinates, :string do
|
11
|
+
read_only true
|
12
|
+
formatted_value{ bindings[:object].coordinates.to_json }
|
13
|
+
end
|
14
|
+
field :lat
|
15
|
+
field :lon
|
16
|
+
|
17
|
+
if block_given?
|
18
|
+
yield self
|
19
|
+
end
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.caching_block(is_active = false)
|
24
|
+
Proc.new {
|
25
|
+
active is_active
|
26
|
+
label I18n.t('hancock.cache')
|
27
|
+
field :perform_caching, :toggle
|
28
|
+
field :cache_keys_str, :text
|
29
|
+
|
30
|
+
if block_given?
|
31
|
+
yield self
|
32
|
+
end
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.url_block(is_active = false)
|
37
|
+
Proc.new {
|
38
|
+
active is_active
|
39
|
+
label I18n.t('hancock.url')
|
40
|
+
field :slugs, :hancock_slugs
|
41
|
+
field :text_slug
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.content_block(is_active = false, options = {})
|
46
|
+
if is_active.is_a?(Hash)
|
47
|
+
is_active, fields = (is_active[:active] || false), is_active
|
48
|
+
end
|
49
|
+
|
50
|
+
_excluded_fields = options.delete(:excluded_fields) || []
|
51
|
+
Proc.new {
|
52
|
+
active is_active
|
53
|
+
label I18n.t('hancock.content')
|
54
|
+
field :excerpt, :hancock_html unless _excluded_fields.include?(:excerpt)
|
55
|
+
field :content, :hancock_html unless _excluded_fields.include?(:content)
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|