177 lines
4.5 KiB
Ruby
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
|