Provides syntactic sugar for accessing settings that represent file system paths. For every tomo setting in the form
:<name>_path, Paths will expose a method of that name that behaves like a Ruby Pathname object. As a special exception, the
:deploy_to setting is also exposed even though it does not follow the same naming convention.
In tomo the following path settings are always available:
settings[:deploy_to] # => "/var/www/my-app" settings[:current_path] # => "/var/www/my-app/current" settings[:release_path] # => "/var/www/my-app/releases/20190531164322" settings[:releases_path] # => "/var/www/my-app/releases" settings[:shared_path] # => "/var/www/my-app/shared"
Using Paths, these same settings can be accessed like this:
paths.deploy_to # => "/var/www/my-app" paths.current # => "/var/www/my-app/current" paths.release # => "/var/www/my-app/releases/20190531164322" paths.releases # => "/var/www/my-app/releases" paths.shared # => "/var/www/my-app/shared"
More powerfully, the values returned by Paths respond to
dirname, so you can easily compose them:
paths.current.dirname # => "/var/www/my-app" paths.release.join("tmp") # => "/var/www/my-app/releases/20190531164322/tmp" paths.shared.join("bundle") # => "/var/www/my-app/shared/bundle"
Paths can be used wherever a path string is expected, like chdir:
remote.chdir(paths.current) do remote.run("bundle", "exec", "puma", "--daemon") end # $ cd /var/www/my-app/current && bundle exec puma --daemon
If a plugin defines a setting with the suffix
_path or if you create your own setting with that suffix, it automatically will be exposed via the Paths object:
# .tomo/config.rb set my_custom_path: "/opt/custom"
paths.my_custom.join("var") # => "/opt/custom/var"