# Trouble deploying ferret with Capistrano

**URL:** <https://www.ruby-forum.com/t/trouble-deploying-ferret-with-capistrano/141086>\
**Category:** Ferret\
**Created:** [June 21, 2008, 9:55pm UTC](https://www.ruby-forum.com/t/trouble-deploying-ferret-with-capistrano/141086 "2008-06-21T21:55:56Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![mroths](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/c89c15/32.png) [@mroths](https://www.ruby-forum.com/u/mroths)\
**Post date:** [June 21, 2008, 9:55pm UTC](https://www.ruby-forum.com/t/trouble-deploying-ferret-with-capistrano/141086/1 "2008-06-21T21:55:56Z")

</div>

Why do I get this error “No such file or directory -  
/home/mrichman/www/myapp/releases/20080619193605/log/ferret\_index.log”  
when the release I’m deploying is 20080621135622 ?

I have /shared/log/ferret\_index.log, which is symlinked via shared/log  
-\> current/log.

When the deployment fails, the only thing left in 20080619193605 is  
index/

The error is frustrating because it shows up in the middle of one of my  
migrations…I thought all these tasks were synchronous:

$ cap deploy:cold

# \*\* [out :: 207.xxx.xxx.xxx] == 28 AddAgeAndGender: migrating

# \*\* [out :: 207.xxx.xxx.xxx] – add\_column(:people, :gender, :string, {:limit=\>1}) \*\* [out :: 207.xxx.xxx.xxx] -\> 0.1351s \*\* [out :: 207.xxx.xxx.xxx] – add\_index(:people, :gender) \*\* [out :: 207.xxx.xxx.xxx] -\> 0.0884s \*\* [out :: 207.xxx.xxx.xxx] – add\_column(:people, :seeking\_gen \*\*\* [err :: 207.xxx.xxx.xxx] rake aborted! \*\*\* [err :: 207.xxx.xxx.xxx] No such file or directory - /home/mrichman/www/myapp/releases/20080619193605/log/ferret\_index.log \*\*\* [err :: 207.xxx.xxx.xxx] \*\*\* [err :: 207.xxx.xxx.xxx] (See full trace by running task with –trace) \*\* [out :: 207.xxx.xxx.xxx] der, :string, {:limit=\>1}) \*\* [out :: 207.xxx.xxx.xxx] -\> 0.0698s \*\* [out :: 207.xxx.xxx.xxx] – add\_index(:people, :seeking\_gender) \*\* [out :: 207.xxx.xxx.xxx] -\> 0.0499s \*\* [out :: 207.xxx.xxx.xxx] – add\_column(:people, :birthdate, :date) \*\* [out :: 207.xxx.xxx.xxx] -\> 0.0699s \*\* [out :: 207.xxx.xxx.xxx] – add\_index(:people, :birthdate) \*\* [out :: 207.xxx.xxx.xxx] -\> 0.0499s \*\* [out :: 207.xxx.xxx.xxx] == 28 AddAgeAndGender: migrated (0.4638s)

I’m just trying to sort out the “No such file or directory” error which  
is preventing me from deploying.

My Capistrano tasks look like:

after “deploy:update\_code”, “db:symlink\_config”,  
“ferret:server:copy\_config”, “ferret:index:symlink”  
before “deploy:start”, “ferret:server:start”  
after “deploy:stop”, “ferret:server:stop”  
after “deploy:restart”, “ferret:server:restart”

namespace :ferret do  
namespace :index do  
desc \<\<-DESC  
An after\_update\_code task to symlink release/index to shared/index   
useful for maintaining a constant ferret index between deployments  
DESC  
task :symlink, :role =\> :app do  
ferret.index.create  
run \<\<-CMD  
rm -rf #{release\_path}/index &&  
ln -nfs #{shared\_path}/index #{release\_path}/index  
CMD  
end

```
desc "Creates the shared/index directory for persistent ferret

```

indexes"  
task :create, :role =\> :app do  
run “if [! -d #{shared\_path}/index]; then mkdir -p  
#{shared\_path}/index ; fi”  
end

```
desc "Removes the contents of the shared/index directory"
task :purge, :role => :app do
  run "if [-d #{shared_path}/index]; then rm -rf

```

#{shared\_path}/index/\* ; fi"  
end  
end # namespace :index

namespace :server do  
desc “Configure ferret server”  
task :configure, :role =\> :app do  
config = {rails\_env =\> {‘port’ =\> ferret\_port,  
‘host’ =\> ferret\_host,  
‘pid\_file’ =\>  
“#{current\_path}/log/ferret-#{rails\_env}.pid”}}  
ferret\_server\_yml = config.to\_yaml

```
  run "if [! -d #{shared_path}/config]; then mkdir

```

#{shared\_path}/config; fi"  
put(ferret\_server\_yml, “#{shared\_path}/config/ferret\_server.yml”,  
:mode =\> 0644)  
end

```
desc "Copies the ferret_server.yml file to release_path/config"
task :copy_config, :role => :app do
  on_rollback {
    puts " ***** File shared/config/ferret_server.yml is missing.

```

Make sure you have run configure\_ferret first. \*\*\*\*\*"  
}

```
  run "cp #{shared_path}/config/ferret_server.yml

```

#{release\_path}/config/"  
end

```
desc "Start ferret server"
task :start, :role => :app do
  run "RAILS_ENV=#{rails_env} #{current_path}/script/runner

```

#{current\_path}/script/ferret\_start"  
end

```
desc "Stop ferret server"
task :stop, :role => :app do
  run "RAILS_ENV=#{rails_env} #{current_path}/script/runner

```

#{current\_path}/script/ferret\_stop"  
end

```
desc "Restart ferret server"
task :restart, :role => :app do
  ferret.server.stop
  sleep(5)
  ferret.server.start
end

```

end # namespace :server  
end # namespace :ferret

Thanks,  
Mark
