[TL;DR] The official bedrock-capistrano deploy script does not include deployment for sage. I want capistrano to generate the theme dist and vendor directories upon deployment, instead of including them in the git repo.
I added code to capistrano’s deploy.rb script that does the above, but it fails when copying the dist directory to the release, complaining that the dist folder isn’t there (while it IS there).
If someone would take a look or test this on a clean bedrock/sage install, any help would be greatly appreciated.
–
I usually deploy with Capistrano using the deploy scripts from the Bedrock documentation:
The above scripts do NOT automate the sage build process (generate/upload dist folder & composer install from the theme directory). This makes it necessary to manually do a yarn build:production
, and push the entire dist + vendor directories to the git repo before deploying.
Not that bad, but it seems to me it should be better to update the capistrano deploy script.
After taking a look at https://github.com/wdeer/bedrock-sage9-capistrano, I’ve added some code to my deploy.rb script:
namespace :deploy do
set :local_app_path, Pathname.new(Dir.pwd)
set :local_theme_path, fetch(:local_app_path).join(fetch(:webroot), 'app/themes/', fetch(:theme_dir))
set :local_dist_path, fetch(:local_theme_path).join('dist')
task :compile do
run_locally do
within fetch(:local_theme_path) do
execute :yarn, 'build:production'
end
end
end
task :copy do
on roles(:web) do
set :theme_path, fetch(:release_path).join(fetch(:webroot),'app/themes/',fetch(:theme_dir))
set :remote_dist_path, -> { fetch(:theme_path).join('dist') }
within fetch(:theme_path) do
execute :mkdir, 'dist'
puts "Dist folder created in #{:theme_path}"
end
puts "Your local distribution path: #{fetch(:local_dist_path)} "
puts "Your remote distribution path: #{fetch(:remote_dist_path)} "
puts "Uploading files to remote "
upload! fetch(:local_dist_path).to_s, fetch(:remote_dist_path), recursive: true
end
end
task assets: %w(compile copy)
end
I’ve added the execute :mkdir, 'dist'
line because the upload!
command threw an error complaining that the ‘dist’ directory didn’t exist. Which now works (I’ve checked, dist directory is created in the new releases’ theme directory, and has correct permissions).
What is weird, is that it still throws an error, complaining about the dist directory not being there.
The error:
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as user@ssh_host: scp: ~/subsites/staging/releases/20190225141859/www/app/themes/my_theme/dist: No such file or directory
Caused by:
scp: ~/subsites/staging/releases/20190225141859/www/app/themes/my_theme/dist: No such file or directory
Tasks: TOP => deploy:assets => deploy:copy
(See full trace by running task with --trace)
The deploy has failed with an error: Exception while executing as user@ssh_host: scp: ~/subsi
tes/staging/releases/20190225141859/www/app/themes/my_theme/dist: No such file or directory