169 lines
4.3 KiB
Ruby
169 lines
4.3 KiB
Ruby
namespace :load do
|
|
task :defaults do
|
|
set :laravel_roles, :all
|
|
|
|
# 是否在部署时上传 .env 文件
|
|
set :laravel_upload_dotenv_file_on_deploy, true
|
|
|
|
# 上传时的本地 .env 文件
|
|
set :laravel_dotenv_file, ".env.#{fetch(:stage)}"
|
|
|
|
# 软链文件夹
|
|
set :laravel_linked_dirs, ["storage"]
|
|
|
|
# 可写文件夹
|
|
set :laravel_writable_dirs, [
|
|
"bootstrap/cache",
|
|
"storage",
|
|
"storage/app",
|
|
"storage/app/public",
|
|
"storage/framework",
|
|
"storage/framework/cache",
|
|
"storage/framework/sessions",
|
|
"storage/framework/views",
|
|
"storage/logs"
|
|
]
|
|
|
|
set :laravel_server_user, 'www-data'
|
|
end
|
|
end
|
|
|
|
namespace :laravel do
|
|
desc "上传 .env 文件到发布目录"
|
|
task :upload_dotenv_file do
|
|
next unless fetch(:laravel_upload_dotenv_file_on_deploy)
|
|
|
|
dotenv_file = fetch(:laravel_dotenv_file)
|
|
|
|
run_locally do
|
|
execute :touch, dotenv_file
|
|
end
|
|
|
|
on release_roles(fetch(:laravel_roles)) do
|
|
upload! dotenv_file, "#{release_path}/.env"
|
|
end
|
|
end
|
|
|
|
desc "检查软链目录"
|
|
task "check:linked_dirs" do
|
|
laravel_linked_dirs = fetch(:laravel_linked_dirs)
|
|
|
|
if fetch(:laravel_linked_dirs)
|
|
set :linked_dirs, fetch(:linked_dirs, []).push(*laravel_linked_dirs)
|
|
end
|
|
end
|
|
|
|
desc "给与可写文件夹权限"
|
|
task :writable do
|
|
on release_roles(fetch(:laravel_roles)) do
|
|
laravel_writable_dirs = fetch(:laravel_writable_dirs)
|
|
|
|
next unless laravel_writable_dirs
|
|
|
|
within release_path do
|
|
execute :mkdir, "-p", laravel_writable_dirs.join(" ")
|
|
end
|
|
|
|
set :file_permissions_paths, fetch(:file_permissions_paths, [])
|
|
.push(*laravel_writable_dirs)
|
|
.uniq
|
|
|
|
set :file_permissions_users, fetch(:file_permissions_users, [])
|
|
.push(fetch(:laravel_server_user))
|
|
.uniq
|
|
end
|
|
end
|
|
|
|
desc "执行 artisan"
|
|
task :artisan, :command do |t, args|
|
|
args.with_defaults(:command => :list)
|
|
|
|
on release_roles(fetch(:laravel_roles)) do
|
|
within release_path do
|
|
execute :php, :artisan, args[:command], *args.extras
|
|
end
|
|
end
|
|
|
|
# 允许多次调用 laravel:artisan 任务
|
|
# https://github.com/capistrano/capistrano/issues/1686
|
|
Rake::Task["laravel:artisan"].reenable
|
|
end
|
|
|
|
desc "执行 artisan config:cache"
|
|
task "artisan:config:cache" do
|
|
invoke "laravel:artisan", "config:cache"
|
|
end
|
|
|
|
desc "执行 artisan db:seed"
|
|
task "artisan:db:seed" do
|
|
invoke "laravel:artisan", "db:seed", "--force"
|
|
end
|
|
|
|
desc "执行 artisan migrate"
|
|
task "artisan:migrate" do
|
|
invoke "laravel:artisan", :migrate, "--force"
|
|
end
|
|
|
|
desc "执行 artisan migrate:fresh"
|
|
task "artisan:migrate:fresh" do
|
|
invoke "laravel:artisan", "migrate:fresh", "--force"
|
|
end
|
|
|
|
desc "执行 artisan migrate:rollback"
|
|
task "artisan:migrate:rollback" do
|
|
invoke "laravel:artisan", "migrate:rollback", "--force"
|
|
end
|
|
|
|
desc "执行 artisan optimize"
|
|
task "artisan:optimize" do
|
|
invoke "laravel:artisan", :optimize
|
|
end
|
|
|
|
desc "执行 artisan optimize:clear"
|
|
task "artisan:optimize:clear" do
|
|
invoke "laravel:artisan", "optimize:clear"
|
|
end
|
|
|
|
desc "执行 artisan queue:restart"
|
|
task "artisan:queue:restart" do
|
|
invoke "laravel:artisan", "queue:restart"
|
|
end
|
|
|
|
desc "执行 artisan storage:link"
|
|
task "artisan:storage:link" do
|
|
invoke "laravel:artisan", "storage:link"
|
|
end
|
|
|
|
desc "执行 artisan route:cache"
|
|
task "artisan:route:cache" do
|
|
invoke "laravel:artisan", "route:cache"
|
|
end
|
|
|
|
desc "执行 artisan view:cache"
|
|
task "artisan:view:cache" do
|
|
invoke "laravel:artisan", "view:cache"
|
|
end
|
|
|
|
desc "执行 artisan view:clear"
|
|
task "artisan:view:clear" do
|
|
invoke "laravel:artisan", "view:clear"
|
|
end
|
|
end
|
|
|
|
namespace :deploy do
|
|
task :vendors do
|
|
invoke "composer:install"
|
|
end
|
|
|
|
before "deploy:starting", "laravel:check:linked_dirs"
|
|
after "deploy:updated", "laravel:upload_dotenv_file"
|
|
after "deploy:updated", "laravel:writable"
|
|
after 'deploy:updated', 'deploy:set_permissions:acl'
|
|
after "deploy:updated", "deploy:vendors"
|
|
after "deploy:vendors", "laravel:artisan:config:cache"
|
|
after "deploy:vendors", "laravel:artisan:route:cache"
|
|
after "deploy:vendors", "laravel:artisan:view:cache"
|
|
after "deploy:vendors", "laravel:artisan:storage:link"
|
|
after "deploy:vendors", "laravel:artisan:migrate"
|
|
end
|