Wrap node commands with Capistrano
This code is based on what the rvm1-capistrano and capistrano-nvm gems do, but simplified a bit to take advantage of the `fnm exec` command. Since ExecJS will check for a JavaScript runtime every time the application is started, we need to include commands like `bundle` (used when running `bin/delayed_job`), `puma` and `rake`, so Node.js is found when running these commands. I'm not sure whether `pumactl` is also necessary, but I've added it for consistency. We're also including the default commands gems like capistrano-nvm use because we will add the `npm` command in the near future. Note that, in order to setup FNM, we need to enter the actual release folder (using `within release_path` isn't enough). So we have to run this task after the actual release is created; otherwise many commands would run in the previous release's folder.
This commit is contained in:
@@ -46,6 +46,7 @@ set :fnm_setup_command, -> do
|
||||
"cd #{release_path} && fnm env > /dev/null && eval \"$(fnm env)\""
|
||||
end
|
||||
set :fnm_install_node_command, -> { "#{fetch(:fnm_setup_command)} && fnm use --install-if-missing" }
|
||||
set :fnm_map_bins, %w[bundle node npm puma pumactl rake yarn]
|
||||
|
||||
set :puma_conf, "#{release_path}/config/puma/#{fetch(:rails_env)}.rb"
|
||||
|
||||
@@ -59,6 +60,8 @@ namespace :deploy do
|
||||
Rake::Task["delayed_job:default"].clear_actions
|
||||
Rake::Task["puma:smart_restart"].clear_actions
|
||||
|
||||
after "git:create_release", "map_node_bins"
|
||||
|
||||
after :updating, "install_node"
|
||||
after :updating, "install_ruby"
|
||||
|
||||
@@ -120,6 +123,20 @@ task :install_node do
|
||||
end
|
||||
end
|
||||
|
||||
task :map_node_bins do
|
||||
on roles(:app) do
|
||||
within release_path do
|
||||
with rails_env: fetch(:rails_env) do
|
||||
prefix = "#{fetch(:fnm_setup_command)} && fnm exec"
|
||||
|
||||
fetch(:fnm_map_bins).each do |command|
|
||||
SSHKit.config.command_map.prefix[command.to_sym].unshift(prefix)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
task :refresh_sitemap do
|
||||
on roles(:app) do
|
||||
within release_path do
|
||||
|
||||
Reference in New Issue
Block a user