WhyAyala WhyAyala - 4 years ago 184
Ruby Question

Chef: Referencing attributes from within a recipe

I have an attribute file titled

default.rb
with a key in it
default['current']
that stores a dir in string format. I wanted to use this for the following command to use when it changes directories:

# Run database migrations
execute 'database migrations' do
user 'ubuntu'
cwd "#{default['current']}"
command 'sudo php artisan down && sudo php artisan migrate --force && sudo php artisan up'
end


Instead when i ran the recipe i got the following error.

NameError
---------
No resource, method, or local variable named `default' for `Chef::Recipe "deploy"'


Is there a proper way to do this that I'm missing? I'd rather not hard code in the working directory.

Answer Source

When attributes are referenced in a recipe, we need to prefix them with node.default, like this:

cwd     "#{node.default['current']}"

See also: Overriding attributes in the recipe

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download