6
0
Fork 0
jiqu-library-server/deploy/lib/capistrano/tasks/laravel.rake

177 lines
4.5 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_files, [".env"]
# 软链文件夹
set :laravel_linked_dirs, ["storage"]
# 可写文件夹
set :laravel_writable_dirs, [
"storage",
"storage/app",
"storage/app/public",
"storage/framework",
"storage/framework/cache",
"storage/framework/sessions",
"storage/framework/views",
"storage/logs",
]
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, "#{shared_path}/.env"
end
end
desc "准备软链文件"
task :resolve_linked_files do
on release_roles(fetch(:laravel_roles)) do
laravel_linked_files = fetch(:laravel_linked_files)
next unless laravel_linked_files
# 创建用于软链的文件
within shared_path do
execute :touch, laravel_linked_files.join(" ")
end
set :linked_files, fetch(:linked_files, []).push(*laravel_linked_files)
end
end
desc "准备软链目录"
task :resolve_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 :resolve_writable_dirs 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
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:resolve_linked_dirs"
after "deploy:check:directories", "laravel:upload_dotenv_file"
after "deploy:check:directories", "laravel:resolve_linked_files"
after "deploy:updated", "laravel:resolve_writable_dirs"
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