xing-framework 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/default_configuration/base_app/API_DOC/README +23 -0
- data/default_configuration/base_app/API_DOC/admin-menus +167 -0
- data/default_configuration/base_app/API_DOC/admin-pages +173 -0
- data/default_configuration/base_app/API_DOC/content-block +10 -0
- data/default_configuration/base_app/API_DOC/navigation +54 -0
- data/default_configuration/base_app/API_DOC/page +38 -0
- data/default_configuration/base_app/CHANGELOG.md +122 -0
- data/default_configuration/base_app/Capfile +26 -0
- data/default_configuration/base_app/Gemfile +7 -0
- data/default_configuration/base_app/Gemfile.lock +155 -0
- data/default_configuration/base_app/README.md +24 -0
- data/default_configuration/base_app/Rakefile +25 -0
- data/default_configuration/base_app/backend/Gemfile +45 -0
- data/default_configuration/base_app/backend/Gemfile.lock +292 -0
- data/default_configuration/base_app/backend/README +12 -0
- data/default_configuration/base_app/backend/Rakefile +10 -0
- data/default_configuration/base_app/backend/app/controllers/application_controller.rb +3 -0
- data/default_configuration/base_app/backend/app/controllers/confirmations_controller.rb +3 -0
- data/default_configuration/base_app/backend/app/controllers/passwords_controller.rb +3 -0
- data/default_configuration/base_app/backend/app/controllers/registrations_controller.rb +15 -0
- data/default_configuration/base_app/backend/app/models/ability.rb +13 -0
- data/default_configuration/base_app/backend/app/models/role/admin.rb +8 -0
- data/default_configuration/base_app/backend/app/models/user.rb +43 -0
- data/default_configuration/base_app/backend/autotest/discover.rb +2 -0
- data/default_configuration/base_app/backend/bin/bundle +3 -0
- data/default_configuration/base_app/backend/bin/rails +4 -0
- data/default_configuration/base_app/backend/bin/rake +4 -0
- data/default_configuration/base_app/backend/config.ru +6 -0
- data/default_configuration/base_app/backend/config/application.rb +71 -0
- data/default_configuration/base_app/backend/config/boot.rb +4 -0
- data/default_configuration/base_app/backend/config/database.yml.ci +9 -0
- data/default_configuration/base_app/backend/config/database.yml.example +22 -0
- data/default_configuration/base_app/backend/config/environment.rb +5 -0
- data/default_configuration/base_app/backend/config/environments/development.rb +45 -0
- data/default_configuration/base_app/backend/config/environments/production.rb +78 -0
- data/default_configuration/base_app/backend/config/environments/staging.rb +48 -0
- data/default_configuration/base_app/backend/config/environments/test.rb +47 -0
- data/default_configuration/base_app/backend/config/initializers/assets.rb +8 -0
- data/default_configuration/base_app/backend/config/initializers/backtrace_silencers.rb +7 -0
- data/default_configuration/base_app/backend/config/initializers/constants.rb +1 -0
- data/default_configuration/base_app/backend/config/initializers/cookies_serializer.rb +3 -0
- data/default_configuration/base_app/backend/config/initializers/devise.rb +241 -0
- data/default_configuration/base_app/backend/config/initializers/devise_token_auth.rb +22 -0
- data/default_configuration/base_app/backend/config/initializers/filter_parameter_logging.rb +4 -0
- data/default_configuration/base_app/backend/config/initializers/inflections.rb +16 -0
- data/default_configuration/base_app/backend/config/initializers/mime_types.rb +4 -0
- data/default_configuration/base_app/backend/config/initializers/session_store.rb +3 -0
- data/default_configuration/base_app/backend/config/initializers/smtp.rb +25 -0
- data/default_configuration/base_app/backend/config/initializers/time_formats.rb +12 -0
- data/default_configuration/base_app/backend/config/initializers/wrap_parameters.rb +14 -0
- data/default_configuration/base_app/backend/config/locales/en.yml +23 -0
- data/default_configuration/base_app/backend/config/locales/json.yml +29 -0
- data/default_configuration/base_app/backend/config/routes.rb +33 -0
- data/default_configuration/base_app/backend/config/secrets.yml.ci +22 -0
- data/default_configuration/base_app/backend/config/secrets.yml.example +57 -0
- data/default_configuration/base_app/backend/config/sidekiq.yml +4 -0
- data/default_configuration/base_app/backend/db/sample_data/users.rake +10 -0
- data/default_configuration/base_app/backend/db/seeds.rb +14 -0
- data/default_configuration/base_app/backend/lib/static-app.rb +15 -0
- data/default_configuration/base_app/backend/public/404.html +26 -0
- data/default_configuration/base_app/backend/public/422.html +26 -0
- data/default_configuration/base_app/backend/public/500.html +26 -0
- data/default_configuration/base_app/backend/public/favicon.ico +0 -0
- data/default_configuration/base_app/backend/public/index.html +0 -0
- data/default_configuration/base_app/backend/public/robots.txt +5 -0
- data/default_configuration/base_app/backend/script/rails +6 -0
- data/default_configuration/base_app/backend/spec/factories/user_sessions_factory.rb +6 -0
- data/default_configuration/base_app/backend/spec/factories/users_factory.rb +35 -0
- data/default_configuration/base_app/backend/spec/features/user_sends_reset_password_email_spec.rb +30 -0
- data/default_configuration/base_app/backend/spec/features/user_signs_up_spec.rb +32 -0
- data/default_configuration/base_app/backend/spec/models/role/admin_spec.rb +12 -0
- data/default_configuration/base_app/backend/spec/models/role_spec.rb +48 -0
- data/default_configuration/base_app/backend/spec/models/user_spec.rb +59 -0
- data/default_configuration/base_app/backend/spec/requests/resources_index_spec.rb +22 -0
- data/default_configuration/base_app/backend/spec/spec_helper.rb +65 -0
- data/default_configuration/base_app/backend/spec/support/devise_helper.rb +78 -0
- data/default_configuration/base_app/backend/spec/support/log_tests.rb +5 -0
- data/default_configuration/base_app/backend/spec/support/session_helpers.rb +67 -0
- data/default_configuration/base_app/backend/spec/tasks/sample_data_rake_spec.rb +17 -0
- data/default_configuration/base_app/backend/static-app.ru +3 -0
- data/default_configuration/base_app/codeclimate.yml +7 -0
- data/default_configuration/base_app/config/compass.rb +21 -0
- data/default_configuration/base_app/config/deploy.rb +157 -0
- data/default_configuration/base_app/config/deploy/bundle-config +4 -0
- data/default_configuration/base_app/config/deploy/production.rb +7 -0
- data/default_configuration/base_app/config/deploy/staging.rb +6 -0
- data/default_configuration/base_app/doc/01_fail_resources.txt +173 -0
- data/default_configuration/base_app/doc/02_fail_auth.txt +165 -0
- data/default_configuration/base_app/doc/03_fail_menus.txt +174 -0
- data/default_configuration/base_app/dummy-api/admin/menu_items/10.json +15 -0
- data/default_configuration/base_app/dummy-api/admin/menu_items/11.json +15 -0
- data/default_configuration/base_app/dummy-api/admin/menu_items/12.json +15 -0
- data/default_configuration/base_app/dummy-api/admin/menu_items/13.json +15 -0
- data/default_configuration/base_app/dummy-api/admin/menu_items/14.json +15 -0
- data/default_configuration/base_app/dummy-api/admin/menu_items/15.json +15 -0
- data/default_configuration/base_app/dummy-api/admin/menu_items/16.json +15 -0
- data/default_configuration/base_app/dummy-api/admin/menus.json +23 -0
- data/default_configuration/base_app/dummy-api/admin/menus/1.json +118 -0
- data/default_configuration/base_app/dummy-api/admin/menus/2.json +8 -0
- data/default_configuration/base_app/dummy-api/admin/pages.json +105 -0
- data/default_configuration/base_app/dummy-api/admin/pages/about_us.json +45 -0
- data/default_configuration/base_app/dummy-api/admin/pages/contact_us.json +36 -0
- data/default_configuration/base_app/dummy-api/admin/pages/gallery.json +36 -0
- data/default_configuration/base_app/dummy-api/admin/pages/home.json +36 -0
- data/default_configuration/base_app/dummy-api/admin/pages/homepage.json +18 -0
- data/default_configuration/base_app/dummy-api/admin/pages/links.json +36 -0
- data/default_configuration/base_app/dummy-api/admin/pages/newsletter.json +54 -0
- data/default_configuration/base_app/dummy-api/homepage.json +14 -0
- data/default_configuration/base_app/dummy-api/navigation/main.json +119 -0
- data/default_configuration/base_app/dummy-api/pages/about_us.json +41 -0
- data/default_configuration/base_app/dummy-api/pages/contact_us.json +32 -0
- data/default_configuration/base_app/dummy-api/pages/gallery.json +32 -0
- data/default_configuration/base_app/dummy-api/pages/home.json +32 -0
- data/default_configuration/base_app/dummy-api/pages/homepage.json +14 -0
- data/default_configuration/base_app/dummy-api/pages/links.json +32 -0
- data/default_configuration/base_app/dummy-api/pages/newsletter.json +50 -0
- data/default_configuration/base_app/dump.rdb +0 -0
- data/default_configuration/base_app/example-lrd-dev-tmux.conf +17 -0
- data/default_configuration/base_app/frontend/CHANGELOG.md +125 -0
- data/default_configuration/base_app/frontend/Gemfile +5 -0
- data/default_configuration/base_app/frontend/Gemfile.lock +34 -0
- data/default_configuration/base_app/frontend/Gruntfile.js +3 -0
- data/default_configuration/base_app/frontend/LICENSE +19 -0
- data/default_configuration/base_app/frontend/README.md +5 -0
- data/default_configuration/base_app/frontend/bin/index.html +0 -0
- data/default_configuration/base_app/frontend/build.config.js +110 -0
- data/default_configuration/base_app/frontend/changelog.tpl +23 -0
- data/default_configuration/base_app/frontend/config/compass.rb +33 -0
- data/default_configuration/base_app/frontend/config/environments/development.js +4 -0
- data/default_configuration/base_app/frontend/config/environments/integration.js +4 -0
- data/default_configuration/base_app/frontend/config/environments/production.js +3 -0
- data/default_configuration/base_app/frontend/config/environments/test.js +4 -0
- data/default_configuration/base_app/frontend/create +0 -0
- data/default_configuration/base_app/frontend/karma/karma-unit.tpl.js +80 -0
- data/default_configuration/base_app/frontend/module.prefix +1 -0
- data/default_configuration/base_app/frontend/module.suffix +1 -0
- data/default_configuration/base_app/frontend/npm-shrinkwrap.json +4334 -0
- data/default_configuration/base_app/frontend/package.json +75 -0
- data/default_configuration/base_app/frontend/sprockets/index.tpl.js +2 -0
- data/default_configuration/base_app/frontend/src/README.md +48 -0
- data/default_configuration/base_app/frontend/src/app/README.md +68 -0
- data/default_configuration/base_app/frontend/src/app/app.js +47 -0
- data/default_configuration/base_app/frontend/src/app/appConfig.js +19 -0
- data/default_configuration/base_app/frontend/src/app/auth/auth.js +66 -0
- data/default_configuration/base_app/frontend/src/app/auth/config.js +22 -0
- data/default_configuration/base_app/frontend/src/app/auth/confirmations/confirmations-success.tpl.html +1 -0
- data/default_configuration/base_app/frontend/src/app/auth/confirmations/confirmations.js +8 -0
- data/default_configuration/base_app/frontend/src/app/auth/confirmations/confirmationsStates.js +12 -0
- data/default_configuration/base_app/frontend/src/app/auth/passwords/passwords-request-success.tpl.html +3 -0
- data/default_configuration/base_app/frontend/src/app/auth/passwords/passwords-request.tpl.html +16 -0
- data/default_configuration/base_app/frontend/src/app/auth/passwords/passwords-update-success.tpl.html +3 -0
- data/default_configuration/base_app/frontend/src/app/auth/passwords/passwords-update.tpl.html +21 -0
- data/default_configuration/base_app/frontend/src/app/auth/passwords/passwords.js +11 -0
- data/default_configuration/base_app/frontend/src/app/auth/passwords/passwordsControllers.js +47 -0
- data/default_configuration/base_app/frontend/src/app/auth/passwords/passwordsStates.js +38 -0
- data/default_configuration/base_app/frontend/src/app/auth/registrations/registrations-success.tpl.html +1 -0
- data/default_configuration/base_app/frontend/src/app/auth/registrations/registrations.js +14 -0
- data/default_configuration/base_app/frontend/src/app/auth/registrations/registrations.tpl.html +37 -0
- data/default_configuration/base_app/frontend/src/app/auth/registrations/registrationsControllers.js +25 -0
- data/default_configuration/base_app/frontend/src/app/auth/registrations/registrationsStates.js +18 -0
- data/default_configuration/base_app/frontend/src/app/auth/sessions/sessions-success.tpl.html +1 -0
- data/default_configuration/base_app/frontend/src/app/auth/sessions/sessions.js +18 -0
- data/default_configuration/base_app/frontend/src/app/auth/sessions/sessions.tpl.html +25 -0
- data/default_configuration/base_app/frontend/src/app/auth/sessions/sessionsControllers.js +26 -0
- data/default_configuration/base_app/frontend/src/app/auth/sessions/sessionsStates.js +20 -0
- data/default_configuration/base_app/frontend/src/app/homepage/homepage-show.tpl.html +2 -0
- data/default_configuration/base_app/frontend/src/app/homepage/homepage.js +10 -0
- data/default_configuration/base_app/frontend/src/app/homepage/homepage.tpl.html +13 -0
- data/default_configuration/base_app/frontend/src/app/homepage/homepageControllers.js +9 -0
- data/default_configuration/base_app/frontend/src/app/homepage/homepageStates.js +22 -0
- data/default_configuration/base_app/frontend/src/app/inner.tpl.html +16 -0
- data/default_configuration/base_app/frontend/src/app/root.tpl.html +2 -0
- data/default_configuration/base_app/frontend/src/app/rootController.js +8 -0
- data/default_configuration/base_app/frontend/src/app/rootStates.js +20 -0
- data/default_configuration/base_app/frontend/src/assets/README.md +4 -0
- data/default_configuration/base_app/frontend/src/assets/icons/alert.svg +1 -0
- data/default_configuration/base_app/frontend/src/common/README.md +19 -0
- data/default_configuration/base_app/frontend/src/common/components/OnLoginDirective/OnLoginDirective.js +17 -0
- data/default_configuration/base_app/frontend/src/common/components/adminOnly/admin-only.tpl.html +4 -0
- data/default_configuration/base_app/frontend/src/common/components/adminOnly/adminOnly.js +23 -0
- data/default_configuration/base_app/frontend/src/common/components/sessionLinks/session-links.tpl.html +5 -0
- data/default_configuration/base_app/frontend/src/common/components/sessionLinks/sessionLinks.js +25 -0
- data/default_configuration/base_app/frontend/src/common/components/signOut/signOut.js +19 -0
- data/default_configuration/base_app/frontend/src/common/config.js +27 -0
- data/default_configuration/base_app/frontend/src/index.html +86 -0
- data/default_configuration/base_app/frontend/src/styles/_constants.sass +14 -0
- data/default_configuration/base_app/frontend/src/styles/main.sass +52 -0
- data/default_configuration/base_app/frontend/src/styles/partials/_footer.sass +18 -0
- data/default_configuration/base_app/frontend/src/styles/partials/_forms.sass +9 -0
- data/default_configuration/base_app/frontend/src/styles/partials/_layout.sass +17 -0
- data/default_configuration/base_app/frontend/src/styles/partials/_navbar.sass +10 -0
- data/default_configuration/base_app/frontend/src/styles/partials/_typography.sass +18 -0
- data/default_configuration/base_app/frontend/src/styles/states/_errorFallback.sass +7 -0
- data/default_configuration/base_app/frontend/src/styles/states/_root_homepage.sass +8 -0
- data/default_configuration/base_app/frontend/test-help/xpath.js +9 -0
- data/default_configuration/base_app/frontend/test/app.js +24 -0
- data/default_configuration/base_app/frontend/test/auth/confirmations/confirmationsStates.js +46 -0
- data/default_configuration/base_app/frontend/test/auth/passwords/passwordsControllers.js +193 -0
- data/default_configuration/base_app/frontend/test/auth/passwords/passwordsStates.js +108 -0
- data/default_configuration/base_app/frontend/test/auth/registrations/registrationsControllers.js +117 -0
- data/default_configuration/base_app/frontend/test/auth/registrations/registrationsStates.js +64 -0
- data/default_configuration/base_app/frontend/test/auth/sessions/sessionsControllers.js +95 -0
- data/default_configuration/base_app/frontend/test/auth/sessions/sessionsStates.js +67 -0
- data/default_configuration/base_app/frontend/test/specHelper.js +33 -0
- data/default_configuration/base_app/frontend/test/support/mockDirective.js +13 -0
- data/default_configuration/base_app/frontend/test/support/stateResolveFn.js +3 -0
- data/default_configuration/base_app/frontend/test/support/testStates.js +20 -0
- data/default_configuration/base_app/frontend/tools.md +223 -0
- data/default_configuration/base_app/lib/capistrano/tasks/sidekiq.rake +218 -0
- data/default_configuration/base_app/static-app.ru +3 -0
- data/default_configuration/base_app/tmux-windows +68 -0
- data/default_configuration/base_app/tmux-windows.txt +53 -0
- data/lib/xing/cli.rb +8 -3
- data/lib/xing/cli/generators/new_project.rb +48 -13
- metadata +219 -7
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# vim: set ft=ruby :
|
|
2
|
+
#
|
|
3
|
+
namespace :load do
|
|
4
|
+
task :defaults do
|
|
5
|
+
set :sidekiq_default_hooks, -> { true }
|
|
6
|
+
|
|
7
|
+
set :sidekiq_path, -> { release_path }
|
|
8
|
+
set :sidekiq_pid, -> { File.join(shared_path, 'tmp', 'pids', 'sidekiq.pid') }
|
|
9
|
+
set :sidekiq_env, -> { fetch(:rack_env, fetch(:rails_env, fetch(:stage))) }
|
|
10
|
+
set :sidekiq_log, -> { File.join(shared_path, 'log', 'sidekiq.log') }
|
|
11
|
+
set :sidekiq_timeout, -> { 10 }
|
|
12
|
+
set :sidekiq_role, -> { :app }
|
|
13
|
+
set :sidekiq_processes, -> { 1 }
|
|
14
|
+
# Rbenv and RVM integration
|
|
15
|
+
set :rbenv_map_bins, fetch(:rbenv_map_bins).to_a.concat(%w(sidekiq sidekiqctl))
|
|
16
|
+
set :rvm_map_bins, fetch(:rvm_map_bins).to_a.concat(%w(sidekiq sidekiqctl))
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
namespace :deploy do
|
|
21
|
+
before :starting, :check_sidekiq_hooks do
|
|
22
|
+
invoke 'sidekiq:add_default_hooks' if fetch(:sidekiq_default_hooks)
|
|
23
|
+
end
|
|
24
|
+
after :publishing, :restart_sidekiq do
|
|
25
|
+
invoke 'sidekiq:restart' if fetch(:sidekiq_default_hooks)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
namespace :sidekiq do
|
|
30
|
+
def for_each_process(reverse = false, &block)
|
|
31
|
+
pids = processes_pids
|
|
32
|
+
pids.reverse! if reverse
|
|
33
|
+
pids.each_with_index do |pid_file, idx|
|
|
34
|
+
p fetch(:sidekiq_path)
|
|
35
|
+
within fetch(:sidekiq_path) do
|
|
36
|
+
yield(pid_file, idx)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def processes_pids
|
|
42
|
+
pids = []
|
|
43
|
+
fetch(:sidekiq_processes).times do |idx|
|
|
44
|
+
pids.push (idx.zero? && fetch(:sidekiq_processes) <= 1) ?
|
|
45
|
+
fetch(:sidekiq_pid) :
|
|
46
|
+
fetch(:sidekiq_pid).gsub(/\.pid$/, "-#{idx}.pid")
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
pids
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def pid_process_exists?(pid_file)
|
|
53
|
+
pid_file_exists?(pid_file) and test(*("kill -0 $( cat #{pid_file} )").split(' '))
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def pid_file_exists?(pid_file)
|
|
57
|
+
test(*("[ -f #{pid_file} ]").split(' '))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def stop_sidekiq(pid_file)
|
|
61
|
+
if fetch(:stop_sidekiq_in_background, fetch(:sidekiq_run_in_background))
|
|
62
|
+
if fetch(:sidekiq_use_signals)
|
|
63
|
+
background "kill -TERM `cat #{pid_file}`"
|
|
64
|
+
else
|
|
65
|
+
background :bundle, :exec, :sidekiqctl, 'stop', "#{pid_file}", fetch(:sidekiq_timeout)
|
|
66
|
+
end
|
|
67
|
+
else
|
|
68
|
+
execute :bundle, :exec, :sidekiqctl, 'stop', "#{pid_file}", fetch(:sidekiq_timeout)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def quiet_sidekiq(pid_file)
|
|
73
|
+
if fetch(:sidekiq_use_signals)
|
|
74
|
+
background "kill -USR1 `cat #{pid_file}`"
|
|
75
|
+
else
|
|
76
|
+
begin
|
|
77
|
+
execute :bundle, :exec, :sidekiqctl, 'quiet', "#{pid_file}"
|
|
78
|
+
rescue SSHKit::Command::Failed
|
|
79
|
+
# If gems are not installed eq(first deploy) and sidekiq_default_hooks as active
|
|
80
|
+
warn 'sidekiqctl not found (ignore if this is the first deploy)'
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def start_sidekiq(pid_file, idx = 0)
|
|
86
|
+
args = []
|
|
87
|
+
args.push "--index #{idx}"
|
|
88
|
+
args.push "--pidfile #{pid_file}"
|
|
89
|
+
args.push "--environment #{fetch(:sidekiq_env)}"
|
|
90
|
+
args.push "--logfile #{fetch(:sidekiq_log)}" if fetch(:sidekiq_log)
|
|
91
|
+
args.push "--require #{fetch(:sidekiq_require)}" if fetch(:sidekiq_require)
|
|
92
|
+
args.push "--tag #{fetch(:sidekiq_tag)}" if fetch(:sidekiq_tag)
|
|
93
|
+
Array(fetch(:sidekiq_queue)).each do |queue|
|
|
94
|
+
args.push "--queue #{queue}"
|
|
95
|
+
end
|
|
96
|
+
args.push "--config #{fetch(:sidekiq_config)}" if fetch(:sidekiq_config)
|
|
97
|
+
args.push "--concurrency #{fetch(:sidekiq_concurrency)}" if fetch(:sidekiq_concurrency)
|
|
98
|
+
# use sidekiq_options for special options
|
|
99
|
+
args.push fetch(:sidekiq_options) if fetch(:sidekiq_options)
|
|
100
|
+
|
|
101
|
+
if defined?(JRUBY_VERSION)
|
|
102
|
+
args.push '>/dev/null 2>&1 &'
|
|
103
|
+
warn 'Since JRuby doesn\'t support Process.daemon, Sidekiq will not be running as a daemon.'
|
|
104
|
+
else
|
|
105
|
+
args.push '--daemon'
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
if fetch(:start_sidekiq_in_background, fetch(:sidekiq_run_in_background))
|
|
109
|
+
background :bundle, :exec, :sidekiq, args.compact.join(' ')
|
|
110
|
+
else
|
|
111
|
+
execute :bundle, :exec, :sidekiq, args.compact.join(' ')
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
task :add_default_hooks do
|
|
116
|
+
after 'deploy:starting', 'sidekiq:quiet'
|
|
117
|
+
after 'deploy:updated', 'sidekiq:stop'
|
|
118
|
+
after 'deploy:reverted', 'sidekiq:stop'
|
|
119
|
+
after 'deploy:published', 'sidekiq:start'
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
desc 'Quiet sidekiq (stop processing new tasks)'
|
|
123
|
+
task :quiet do
|
|
124
|
+
on roles fetch(:sidekiq_role) do
|
|
125
|
+
if test("[ -d #{release_path} ]") # fixes #11
|
|
126
|
+
for_each_process(true) do |pid_file, idx|
|
|
127
|
+
if pid_process_exists?(pid_file)
|
|
128
|
+
quiet_sidekiq(pid_file)
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
desc 'Stop sidekiq'
|
|
136
|
+
task :stop do
|
|
137
|
+
on roles fetch(:sidekiq_role) do
|
|
138
|
+
if test("[ -d #{release_path} ]")
|
|
139
|
+
for_each_process(true) do |pid_file, idx|
|
|
140
|
+
if pid_process_exists?(pid_file)
|
|
141
|
+
stop_sidekiq(pid_file)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
desc 'Start sidekiq'
|
|
149
|
+
task :start do
|
|
150
|
+
on roles fetch(:sidekiq_role) do
|
|
151
|
+
for_each_process do |pid_file, idx|
|
|
152
|
+
start_sidekiq(pid_file, idx) unless pid_process_exists?(pid_file)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
desc 'Restart sidekiq'
|
|
158
|
+
task :restart do
|
|
159
|
+
invoke 'sidekiq:stop'
|
|
160
|
+
invoke 'sidekiq:start'
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
desc 'Rolling-restart sidekiq'
|
|
164
|
+
task :rolling_restart do
|
|
165
|
+
on roles fetch(:sidekiq_role) do
|
|
166
|
+
for_each_process(true) do |pid_file, idx|
|
|
167
|
+
if pid_process_exists?(pid_file)
|
|
168
|
+
stop_sidekiq(pid_file)
|
|
169
|
+
end
|
|
170
|
+
start_sidekiq(pid_file, idx)
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Delete any pid file not in use
|
|
176
|
+
task :cleanup do
|
|
177
|
+
on roles fetch(:sidekiq_role) do
|
|
178
|
+
for_each_process do |pid_file, idx|
|
|
179
|
+
if pid_file_exists?(pid_file)
|
|
180
|
+
execute "rm #{pid_file}" unless pid_process_exists?(pid_file)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# TODO : Don't start if all proccess are off, raise warning.
|
|
187
|
+
desc 'Respawn missing sidekiq proccesses'
|
|
188
|
+
task :respawn do
|
|
189
|
+
invoke 'sidekiq:cleanup'
|
|
190
|
+
on roles fetch(:sidekiq_role) do
|
|
191
|
+
for_each_process do |pid_file, idx|
|
|
192
|
+
unless pid_file_exists?(pid_file)
|
|
193
|
+
start_sidekiq(pid_file, idx)
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def template_sidekiq(from, to, role)
|
|
200
|
+
[
|
|
201
|
+
File.join('lib', 'capistrano', 'templates', "#{from}-#{role.hostname}-#{fetch(:stage)}.rb"),
|
|
202
|
+
File.join('lib', 'capistrano', 'templates', "#{from}-#{role.hostname}.rb"),
|
|
203
|
+
File.join('lib', 'capistrano', 'templates', "#{from}-#{fetch(:stage)}.rb"),
|
|
204
|
+
File.join('lib', 'capistrano', 'templates', "#{from}.rb.erb"),
|
|
205
|
+
File.join('lib', 'capistrano', 'templates', "#{from}.rb"),
|
|
206
|
+
File.join('lib', 'capistrano', 'templates', "#{from}.erb"),
|
|
207
|
+
File.expand_path("../../templates/#{from}.rb.erb", __FILE__),
|
|
208
|
+
File.expand_path("../../templates/#{from}.erb", __FILE__)
|
|
209
|
+
].each do |path|
|
|
210
|
+
if File.file?(path)
|
|
211
|
+
erb = File.read(path)
|
|
212
|
+
upload! StringIO.new(ERB.new(erb).result(binding)), to
|
|
213
|
+
break
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/bin/bash -e
|
|
2
|
+
|
|
3
|
+
#TODO: port needs to actually do the port addition e.g. -p 1 => +1 to port numbers
|
|
4
|
+
|
|
5
|
+
existing="yes"
|
|
6
|
+
new_thing="pane"
|
|
7
|
+
port=0
|
|
8
|
+
extra_config=~/.lrd-dev-tmux.conf
|
|
9
|
+
|
|
10
|
+
if [ -z $TMUX ]; then
|
|
11
|
+
existing="no"
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
if tmux list-windows -F '#{window_name}' | egrep 'Dev Servers|Grunt Watch|Backend Server|Sidekiq'; then
|
|
15
|
+
echo "It looks like there are already windows open for this tmux?"
|
|
16
|
+
exit 2
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
while getopts Pw option; do
|
|
20
|
+
case $option in
|
|
21
|
+
P) new_thing="pane";;
|
|
22
|
+
w) new_thing="window";;
|
|
23
|
+
|
|
24
|
+
esac
|
|
25
|
+
done
|
|
26
|
+
|
|
27
|
+
DEPENDENCIES_INCLUDE_TMUX=true rake preflight || exit 1
|
|
28
|
+
|
|
29
|
+
frontend_dir=$(realpath frontend)
|
|
30
|
+
backend_dir=$(realpath backend)
|
|
31
|
+
|
|
32
|
+
case $new_thing in
|
|
33
|
+
pane)
|
|
34
|
+
if [ $existing == "yes" ]; then
|
|
35
|
+
tmux new-window -n "Dev Servers" -c $frontend_dir 'bundle exec node_modules/.bin/grunt --stack watch:develop' \; set-window-option remain-on-exit on
|
|
36
|
+
else
|
|
37
|
+
tmux new-session -d -n "Dev Servers" -c $frontend_dir 'bundle exec node_modules/.bin/grunt --stack watch:develop' \; set-window-option remain-on-exit on
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
tmux split-window -c $backend_dir 'bundle exec sidekiq'
|
|
41
|
+
tmux split-window -c $backend_dir 'bundle exec rails server'
|
|
42
|
+
|
|
43
|
+
tmux select-layout -t "Dev Servers" tiled
|
|
44
|
+
;;
|
|
45
|
+
window)
|
|
46
|
+
if [ $existing == "yes" ]; then
|
|
47
|
+
tmux new-window -c $frontend_dir -n "Grunt Watch" 'env; bundle exec node_modules/.bin/grunt watch:develop' \; set-window-option remain-on-exit on
|
|
48
|
+
else
|
|
49
|
+
tmux new-session -d -c $frontend_dir -n "Grunt Watch" 'env; bundle exec node_modules/.bin/grunt watch:develop' \; set-window-option remain-on-exit on
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
tmux new-window -c $backend_dir -n "Backend Server" 'bundle exec rails server' \; set-window-option remain-on-exit on
|
|
53
|
+
|
|
54
|
+
tmux new-window -c $backend_dir -n "Sidekiq" 'bundle exec sidekiq' \; set-window-option remain-on-exit on
|
|
55
|
+
esac
|
|
56
|
+
|
|
57
|
+
if [ -f $extra_config ]; then
|
|
58
|
+
echo Loading $extra_config
|
|
59
|
+
tmux source-file $extra_config
|
|
60
|
+
else
|
|
61
|
+
echo No $extra_config to load
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
if [ $existing != "yes" ]; then
|
|
65
|
+
tmux attach-session -d
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
rake develop:launch_browser
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
A quick guide to tmux-windows:
|
|
2
|
+
|
|
3
|
+
( "Help, I started tmux-windows and I can't get out!" Hit Ctrl-b, type
|
|
4
|
+
kill-session, hit return )
|
|
5
|
+
|
|
6
|
+
This is a script around the very excellent terminal multiplexer tmux. The
|
|
7
|
+
script launches all the services that help develop web apps in the LRD
|
|
8
|
+
framework.
|
|
9
|
+
|
|
10
|
+
Start by running `./tmux-windows` - you'll see some output while it checks
|
|
11
|
+
that things seem to be in order, and then it'll redraw the console into 3
|
|
12
|
+
panes.
|
|
13
|
+
|
|
14
|
+
- In one, you'll see a big Grunt task building the front end JavaScript.
|
|
15
|
+
- In the next, you'll see Sidekiq handling background processes.
|
|
16
|
+
- In the last, you'll see the Rails server handling requests.
|
|
17
|
+
|
|
18
|
+
A browser window should open connected to the development server, so you can
|
|
19
|
+
poke around at things as you work on it.
|
|
20
|
+
|
|
21
|
+
Quickie on the default command and interactions:
|
|
22
|
+
|
|
23
|
+
Tmux is meant to get out of the way while you do other things. As a result,
|
|
24
|
+
you need to let it know that keystrokes are directed at it. By default, you
|
|
25
|
+
prefix all your commands directed at tmux with Ctrl-b.
|
|
26
|
+
|
|
27
|
+
Ctrl-b Up/Down/Left/Right will bounce around between panes.
|
|
28
|
+
Ctrl-b : will open up a command line where you can enter commands for tmux
|
|
29
|
+
Useful examples include
|
|
30
|
+
kill-session (when you're done)
|
|
31
|
+
respawn-pane (if one of the services crashes - Tmux will add the message
|
|
32
|
+
"Pane is dead")
|
|
33
|
+
respawn-window -k (restart everything)
|
|
34
|
+
|
|
35
|
+
Ctrl-b [ enters copy mode which merits its own section
|
|
36
|
+
|
|
37
|
+
Copy Mode:
|
|
38
|
+
You can copy and paste stuff using just the keyboard here, but the most useful
|
|
39
|
+
commands are these:
|
|
40
|
+
You can use PageUp/PageDown and the arrow keys to browse the backlog.
|
|
41
|
+
|
|
42
|
+
? to search - type a few characters, hit return.
|
|
43
|
+
n to search up for the next occurance.
|
|
44
|
+
N to search down for the next occrance.
|
|
45
|
+
(the search commands are brought in from less, if they look familiar)
|
|
46
|
+
|
|
47
|
+
q will end copy mode and go back to the bottom of the console, where the
|
|
48
|
+
service will still be running
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
Finally, there's an example-lrd-dev-tmux.conf file that you can copy to your
|
|
52
|
+
home directory to make thing a little easier. Review it first, if only to find
|
|
53
|
+
out where to put it! :)
|
data/lib/xing/cli.rb
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'byebug'
|
|
2
|
-
|
|
3
1
|
module Xing
|
|
4
2
|
class CLI
|
|
5
3
|
SUPPORTED_VERBS = %w{new}
|
|
@@ -38,12 +36,19 @@ Global Options:
|
|
|
38
36
|
when 'new'
|
|
39
37
|
opts = Trollop::options do
|
|
40
38
|
opt :cms, "Include content management architecture. (coming soon)"
|
|
39
|
+
opt :ruby_version, "Set the ruby version used for the new project (e.g. 2.2)", :type => :string
|
|
41
40
|
stop_on ['name']
|
|
42
41
|
end
|
|
43
42
|
name = ARGV.shift
|
|
44
43
|
Trollop::die "Please specify a project name with 'xing new <name>'" unless name
|
|
45
44
|
Trollop::die "The CMS option is not yet implemented." if opts[:cms]
|
|
46
|
-
|
|
45
|
+
if opts[:ruby_version].nil?
|
|
46
|
+
opts[:ruby_version] = RbConfig::CONFIG.values_at("MAJOR","MINOR").join(".")
|
|
47
|
+
end
|
|
48
|
+
generator = Xing::CLI::Generators::NewProject.new
|
|
49
|
+
generator.target_name = name
|
|
50
|
+
generator.ruby_version = opts[:ruby_version]
|
|
51
|
+
generator.generate
|
|
47
52
|
else
|
|
48
53
|
Trollop::die "Unknown command. Supported commands are [" + SUPPORTED_VERBS.join(" ") + "]"
|
|
49
54
|
end
|
|
@@ -4,26 +4,61 @@ module Xing::CLI::Generators
|
|
|
4
4
|
class NewProject
|
|
5
5
|
include Caliph::CommandLineDSL
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
attr_accessor :target_name
|
|
8
|
+
attr_accessor :ruby_version
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
def shell
|
|
11
|
+
@shell ||= Caliph.new
|
|
12
|
+
end
|
|
13
|
+
attr_writer :shell
|
|
14
|
+
|
|
15
|
+
# For the moment, this is the simplest thing that can work. Zero templating
|
|
16
|
+
# is done so the project will still have the default module names etc.
|
|
17
|
+
def generate
|
|
18
|
+
command = cmd('cp', '-a', File.expand_path('../../../../../default_configuration/base_app/', __FILE__), target_name)
|
|
14
19
|
result = shell.run(command)
|
|
15
20
|
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
unless result.succeeded?
|
|
22
|
+
raise "Attempt to copy base application to #{target_name} failed!"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
write_ruby_version
|
|
26
|
+
write_ruby_version "frontend"
|
|
27
|
+
write_ruby_version "backend"
|
|
28
|
+
|
|
29
|
+
with_temporary_database_yml do
|
|
30
|
+
Bundler.with_clean_env do
|
|
31
|
+
shell.run(cmd("cd", target_name) &
|
|
32
|
+
cmd("bundle", "install")).must_succeed!
|
|
33
|
+
|
|
34
|
+
shell.run(cmd("cd", File.join(target_name, "frontend")) &
|
|
35
|
+
cmd("bundle", "install") &
|
|
36
|
+
cmd("npm", "install")).must_succeed!
|
|
37
|
+
|
|
38
|
+
shell.run(cmd("cd", File.join(target_name, "backend")) &
|
|
39
|
+
cmd("bundle", "install") &
|
|
40
|
+
cmd("rake", "xing:install:migrations")).must_succeed!
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def with_temporary_database_yml
|
|
46
|
+
dbyml_path = File.join(target_name, "backend", "config", "database.yml")
|
|
47
|
+
if File.exist?(dbyml_path)
|
|
48
|
+
yield
|
|
18
49
|
else
|
|
19
|
-
|
|
50
|
+
begin
|
|
51
|
+
File.open(dbyml_path, "w"){}
|
|
52
|
+
yield
|
|
53
|
+
ensure
|
|
54
|
+
File.unlink(dbyml_path)
|
|
55
|
+
end
|
|
20
56
|
end
|
|
21
57
|
end
|
|
22
58
|
|
|
23
|
-
def
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
shell.run(cmd('rm -rf', git_dir))
|
|
59
|
+
def write_ruby_version(*subdir)
|
|
60
|
+
File.open(File.join(*([target_name] + subdir + [".ruby-version"])), "w") do |rv|
|
|
61
|
+
rv.write(ruby_version)
|
|
27
62
|
end
|
|
28
63
|
end
|
|
29
64
|
end
|