parent
c35205c1b0
commit
f5bea41ccf
10 changed files with 0 additions and 338 deletions
|
|
@ -1,113 +0,0 @@
|
|||
# Capistrano tasks for the initial setup
|
||||
|
||||
namespace :deploy do
|
||||
|
||||
desc 'Creates and initialises a new foodsoft instance'
|
||||
task :initial do
|
||||
before 'deploy:check:linked_files', 'deploy:initial:touch_shared'
|
||||
before 'deploy:symlink:linked_files', 'deploy:initial:copy_shared'
|
||||
before 'deploy:updated', 'deploy:initial:secret_token'
|
||||
before 'deploy:updated', 'deploy:initial:app_config'
|
||||
before 'deploy:updated', 'deploy:initial:db:config'
|
||||
before 'deploy:updated', 'deploy:initial:db:create'
|
||||
before 'deploy:migrate', 'deploy:initial:db:load'
|
||||
end
|
||||
after :initial, :deploy
|
||||
|
||||
|
||||
namespace :initial do
|
||||
|
||||
namespace :db do
|
||||
|
||||
desc 'Generate new database.yml with random password'
|
||||
task :config => ['deploy:set_rails_env'] do
|
||||
require 'securerandom'
|
||||
on roles(:app), in: :groups do
|
||||
db_name = fetch(:db_user) || fetch(:application)
|
||||
db_passwd = SecureRandom.urlsafe_base64(24).to_s
|
||||
db_yaml = {
|
||||
fetch(:rails_env).to_s => {
|
||||
'adapter' => 'mysql2',
|
||||
'encoding' => 'utf8',
|
||||
'database' => db_name,
|
||||
'username' => db_name,
|
||||
'password' => db_passwd,
|
||||
}
|
||||
}
|
||||
execute :mkdir, '-p', shared_path.join("config")
|
||||
upload! StringIO.new(db_yaml.to_yaml), shared_path.join("config/database.yml")
|
||||
end
|
||||
end
|
||||
|
||||
# assumes mysql access setup (~/.my.cnf), with permissions
|
||||
desc 'Create database new database'
|
||||
task :create => ['deploy:set_rails_env'] do
|
||||
on roles(:app), in: :sequence do
|
||||
config = capture :cat, shared_path.join("config/database.yml")
|
||||
config = YAML.load(config)[fetch(:rails_env).to_s]
|
||||
# http://www.grahambrooks.com/blog/create-mysql-database-with-capistrano/
|
||||
execute :mysql, "--execute='CREATE DATABASE IF NOT EXISTS `#{config['database']}`';"
|
||||
execute :mysql, "--execute='GRANT ALL ON `#{config['database']}`.* TO \"#{config['username']}\" IDENTIFIED BY \"#{config['password']}\";'"
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Load database schema'
|
||||
task :load => ['deploy:set_rails_env'] do
|
||||
on roles(:app), in: :groups do
|
||||
# workaround nonexistent release_path on first deploy
|
||||
path = releases_path.join(capture(:ls, releases_path).split("\n").sort.last)
|
||||
within path do
|
||||
with rails_env: fetch(:rails_env) do
|
||||
execute :rake, 'db:schema:load'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Writes a new secret token'
|
||||
task :secret_token do
|
||||
require 'securerandom'
|
||||
on roles(:app), in: :groups do
|
||||
secret = SecureRandom.hex(64)
|
||||
text = "Foodsoft::Application.config.secret_key_base = \"#{secret}\""
|
||||
execute :mkdir, '-p', shared_path.join("config/initializers")
|
||||
upload! StringIO.new(text), shared_path.join("config/initializers/secret_token.rb")
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Creates a default app_config.yml'
|
||||
task :app_config do
|
||||
on roles(:app), in: :groups do
|
||||
execute :mkdir, '-p', shared_path.join("config")
|
||||
# workaround nonexistent release_path on first deploy
|
||||
path = releases_path.join(capture(:ls, releases_path).split("\n").sort.last)
|
||||
execute :cp, path.join("config/app_config.yml.SAMPLE"), shared_path.join("config/app_config.yml")
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Touches the shared configuration files (for initial deploy)'
|
||||
task :touch_shared do
|
||||
on roles(:app), in: :groups do
|
||||
fetch(:linked_files).each do |file|
|
||||
execute :touch, shared_path.join(file)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Copies existing shared configuration files'
|
||||
task :copy_shared do
|
||||
on roles(:app), in: :groups do
|
||||
# workaround nonexistent release_path on first deploy
|
||||
path = releases_path.join(capture(:ls, releases_path).split("\n").sort.last)
|
||||
fetch(:linked_files).each do |file|
|
||||
# TODO copy only if existing destination has zero length
|
||||
execute "if [ -e '#{path.join(file)}' ]; then cp '#{path.join(file)}' '#{shared_path.join(file)}'; fi"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
# Capistrano tasks for enabling/disabling foodsoft plugins in the Gemfile
|
||||
#
|
||||
# Please note that the foodsoft plugins should be present already in the
|
||||
# Gemfile, either commented out or not.
|
||||
#
|
||||
# To automatically enable the desired plugins on deployment, create the
|
||||
# file `config/plugins.yml` in the shared directory, containing the
|
||||
# key `enabled` with a list of enabled plugin names (without foodsoft_).
|
||||
# Then add to your `config/deploy.rb`:
|
||||
# before 'bundler:install', 'enable_plugins:auto'
|
||||
|
||||
desc 'Enable only the foodsoft plugins, cap enable_plugins PLUGINS=wiki,messages'
|
||||
task :enable_plugins do
|
||||
on roles(:app), in: :groups do
|
||||
unless env['PLUGINS'].nil?
|
||||
enable_foodsoft_plugins(ENV['PLUGINS'].split(/,\s*/))
|
||||
else
|
||||
raise 'You need to set the PLUGINS environment variable to enable specific plugins'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
namespace :enable_plugins do
|
||||
|
||||
desc 'Enable the foodsoft plugins specified in shared/config/plugins.yml, if it exists (key `enabled`).'
|
||||
task 'auto' do
|
||||
on roles(:app), in: :groups do
|
||||
text = capture :cat, shared_path.join('config/plugins.yml'), '||true'
|
||||
if text
|
||||
plugins = YAML.load(text)
|
||||
enable_foodsoft_plugins(plugins['enabled']) if plugins && !plugins['enabled'].nil?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# need to run in role
|
||||
def enable_foodsoft_plugins(plugins)
|
||||
gemfile = capture :cat, release_path.join('Gemfile')
|
||||
gemfile.gsub! /^\s*(#)?\s*(gem\s+(['"])foodsoft_(.*?)\3)/ do |c|
|
||||
(plugins.index($4) ? '' : '#') + $2
|
||||
end
|
||||
upload! StringIO.new(gemfile), release_path.join('Gemfile')
|
||||
# since we updated the Gemfile, we need to run bundler in non-deployment mode
|
||||
new_bundle_flags = fetch(:bundle_flags).split(/\s+/)
|
||||
new_bundle_flags.reject! {|o| o=='--deployment'}
|
||||
new_bundle_flags << '--no-deployment'
|
||||
set :bundle_flags, new_bundle_flags.join(' ')
|
||||
end
|
||||
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
|
||||
# capistrano-resque could be used, but it does not support running resque as another user.
|
||||
# If you want to run resque as another user, setup sudo to allow running commands as that user:
|
||||
# deploy ALL=(foodsoft_user) NOPASSWD: ALL
|
||||
# and set `:run_user` to the foodsoft user.
|
||||
namespace :resque do
|
||||
|
||||
%w{start stop restart}.each do |action|
|
||||
desc "#{action.capitalize} Resque workers"
|
||||
task action => ['deploy:set_rails_env'] do
|
||||
on roles(:resque), in: :groups do
|
||||
|
||||
SSHKit.config.command_map[:rake_as_run_user] =
|
||||
unless fetch(:run_user).nil? || fetch(:run_user) == fetch(:user)
|
||||
"sudo -u '#{fetch(:run_user)}' "
|
||||
else
|
||||
''
|
||||
end + SSHKit.config.command_map[:rake]
|
||||
|
||||
within current_path do
|
||||
execute :rake_as_run_user, "'resque:#{action}_workers'", "RAILS_ENV='#{fetch(:rails_env)}'"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue