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

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