Sorry.  another long one.

Wayne, I used to use that actually. And I even tried it last night, and today, before sending the email. It didn't work using capistrano, or from anywhere that wasn't a rails_root location. There's still a problem of where the command is run and where mongrel_cluster thinks it's looking for the pid files. Here's how I see it happening...

1) we run "cap restart" on local machine where it logs in via ssh to execute remote commands 2) located in the /home/ssh_user directory, the remote commands run from here. 3) restart runs a "stop/start" command sequence. yes, I've been reading the discussion of using a -USR2 command, but for this discussion we ignore that until the bottom of this email.
4) "stop" line 101, reads the options
5) "read_options" line 28 calls "process_pid_file" to parse the pid_file setting
6) "process_pid_file" sets up several variables for future use.

Here is where it breaks down with a relative path pid_file setting. None of the File.* commands are run from the cwd in that function. They're run from the /home/ssh_user directory. Now I don't know about you but I don't run my applications from that directory. Thus, with a setting of "log/mongrel.pid", the port_pid_file function returns "log/mongrel.8000.pid" and check_process is looking for /home/ssh_user/log/mongrel.8000.pid which obviously doesn't exist. Making a small change, that I am not suggesting is a fix, just temporary, I rewrote this line in process_pid_file (line 40).

@pid_file_dir = File.dirname("[EMAIL PROTECTED]'cwd']}/#{pid_file}")

That's just a test to see if it would work with the addition of the cwd. It worked of course, because now File.dirname had an absolute path to parse.

So, my suggestions from the first email, IMHO, are still valid. Patch mongrel_cluster/init.rb to either ...

1) Change directories in "stop" and "start" before the check_process functions are called so that relative directories are handled correctly, (see my pastie) or 2) Change the process_pid_file function to handle relative directory pid_file settings by prepending the cwd setting.

or 3) have everyone change their mongrel_cluster config files to us absolute directory paths. And, then there's the more recent discussion of changing the restart command to just call a -USR2 on mongrel_rails.

Personally, I'd like it to be fixed within mongrel_cluster so that it's just picked up by everyone when they update their gem. And instead of asking everyone to put in a "after_after_deploy" capistrano task like Zed mentioned in this thread. However, I just tried the following capistrano task...

task :restart do
 sudo "killall -USR2 mongrel_rails"
end

and got this error "No matching processes were found". No idea about that except that when I "ps aux | grep mongrel_rails", each command starts...

/usr/local/bin/ruby18 /usr/local/bin/mongrel_rails start -d -e production -a 127.0.0.1 -c /home/...

My linux_fu is not strong enough to know how to diagnose this last issue.

matte

Wayne E. Seguin wrote:
Matte,
On Apr 17, 2007, at 00:09 , Matte Edens wrote:
"sudo mongrel_rails cluster::restart -C [valid path to config] -- clean"

Is this really a problem with mongrel cluster?

A "fourth" solution is to simply modify your restart task in your Capistrano recipe:

task :restart, :roles => :app do
run(or sudo) "cd #{current_path}; mongrel_rails cluster::restart - C [valid path to config] --clean"
end

_______________________________________________
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users

Reply via email to