Ruby on Rails - Install script

Found http://rubyforge.org:80/frs/download.php/39477/redmine-0.7.3.tar.gz in cache ..

Now installing redmine version 0.7.3 …


Failed to install script : Failed to open /home/foodomain.tld/public_html/redmine/public/stylesheets/redmine/mephisto.css for writing : Bad file descriptor

:frowning:

When this happend?
During installation?
Are you running some other rails applications on your server?
My script is derivated from other install script and I hope that I’ve followed API instructions.
File descriptor seems to be problem somewher else.

Please let me know if you will find something.

Hi!
This happens on install. There are no other rails applications on the server or domain.
Other install scripts work fine!

@redmine_tables = (

);

script_redmine_desc()

sub script_redmine_desc
{
return "redmine";
}

sub script_redmine_uses
{
return ( "ruby", "proxy" );
}

sub script_redmine_longdesc
{
return "Redmine is a flexible project management web application.";
}

script_redmine_versions()

sub script_redmine_versions
{
return ( "0.7.3" );
}

sub script_redmine_category
{
return "Project Management";
}

script_redmine_depends(&domain, version)

Check for ruby command, ruby gems, mod_proxy

sub script_redmine_depends
{
local ($d, $ver) = @_;
local @rv;
&has_command("ruby") || push(@rv, "The ruby command is not installed");
&require_apache();
&has_proxy_balancer($d) ||
push(@rv, "The Apache proxy module is not installed");
&has_domain_databases($d, [ "mysql" ]) ||
push(@rv, "redmine requires either MySQL database");
return @rv;
}

script_redmine_params(&domain, version, &upgrade-info)

Returns HTML for table rows for options for installing Redmine

sub script_redmine_params
{
local ($d, $ver, $upgrade) = @;
local $rv;
local $hdir = &public_html_dir($d, 1);
if ($upgrade) {
# Options are fixed when upgrading
local ($dbtype, $dbname) = split(/
/, $upgrade->{‘opts’}->{‘db’}, 2);
$rv .= &ui_table_row(“Database for redmine tables”, $dbname);
local $dir = $upgrade->{‘opts’}->{‘dir’};
$dir =~ s/^$d->{‘home’}///;
$rv .= &ui_table_row(“Install directory”, $dir);
}
else {
# Show editable install options
local @dbs = &domain_databases($d, [ “mysql” ]);
$rv .= &ui_table_row(“Database for redmine tables”,
&ui_database_select(“db”, undef, @dbs, $d, “redmine”));
$rv .= &ui_table_row(“Install sub-directory under <tt>$hdir</tt>”,
&ui_opt_textbox(“dir”, “redmine”, 30,
“At top level”));
$rv .= &show_mongrels_ports_input($d);
}
return $rv;
}

script_redmine_parse(&domain, version, &in, &upgrade-info)

Returns either a hash ref of parsed options, or an error string

sub script_redmine_parse
{
local ($d, $ver, $in, $upgrade) = @_;
if ($upgrade) {
# Options are always the same
return $upgrade->{‘opts’};
}
else {
local $hdir = &public_html_dir($d, 0);
$in->{‘dir_def’} || $in->{‘dir’} =~ /\S/ && $in->{‘dir’} !~ /../ ||
return “Missing or invalid installation directory”;
local $dir = $in->{‘dir_def’} ? $hdir : “$hdir/$in->{‘dir’}”;
local ($newdb) = ($in->{‘db’} =~ s/^*//);
local $mongrels = &parse_mongrels_ports_input($d, $in);
return $mongrels if (!int($mongrels));
return { ‘db’ => $in->{‘db’},
‘newdb’ => $newdb,
‘dir’ => $dir,
‘mongrels’ => $mongrels,
‘path’ => $in{‘dir_def’} ? “/” : “/$in{‘dir’}”,
};
}
}

script_redmine_check(&domain, version, &opts, &upgrade-info)

Returns an error message if a required option is missing or invalid

sub script_redmine_check
{
local ($d, $ver, $opts, $upgrade) = @;
if (-r “$opts->{‘dir’}/config/database.yml”) {
return “Redmine appears to be already installed in the selected directory”;
}
local ($dbtype, $dbname) = split(/
/, $opts->{‘db’}, 2);
foreach my $t (@redmine_tables) {
local $clash = &find_database_table($dbtype, $dbname, $t);
$clash && return “redmine appears to be already using the selected database (table $clash)”;
}
$opts->{‘mongrels’} ||= 1;
return undef;
}

script_redmine_files(&domain, version, &opts, &upgrade-info)

Returns a list of files needed by redmine, each of which is a hash ref

containing a name, filename and URL

sub script_redmine_files
{
local ($d, $ver, $opts, $upgrade) = @_;
local @files = ( { ‘name’ => “source”,
‘file’ => “redmine-$ver.tar.gz”,
‘url’ => “http://rubyforge.org/frs/download.php/39477/redmine-$ver.tar.gz” } );
}

sub script_redmine_commands
{
return ("ruby", "gcc", "make");
}

script_redmine_install(&domain, version, &opts, &files, &upgrade-info)

Actually installs PhpWiki, and returns either 1 and an informational

message, or 0 and an error

sub script_redmine_install
{
local ($d, $version, $opts, $files, $upgrade) = @_;
local ($out, $ex);

Check for the gem command (here instead of earlier, as it may have been

automatically installed).

&has_command("gem") || return (0, "The Ruby gem command is not installed");

Get database settings

if ($opts->{‘newdb’} && !$upgrade) {
local $err = &create_script_database($d, $opts->{‘db’});
return (0, “Database creation failed : $err”) if ($err);
}
local ($dbtype, $dbname) = split(/_/, $opts->{‘db’}, 2);
local $dbuser = &mysql_user($d);
local $dbpass = &mysql_pass($d);
local $dbhost = &get_database_host($dbtype);
local $dberr = &check_script_db_connection($dbtype, $dbname,
$dbuser, $dbpass);
return (0, “Database connection failed : $dberr”) if ($dberr);

Install mongrel first, as we need it to run redmine

local $err = &install_ruby_gem("mongrel", undef, 1);
if ($err) {
return (0, "Mongrel GEM install failed : <pre>$err</pre>");
}
if (!&find_rails_command("mongrel_rails")) {
return (0, "Mongrel appeared to install, but mongrel_rails command ".
"was not found");
}

Install Ruby on Rails

$err = &install_ruby_gem("rails", undef, 1);
if ($err) {
return (0, "Rails on Rails install failed : <pre>$err</pre>");
}

Install Ruby mysql driver

$err = &install_ruby_gem("mysql", undef, 1);
if ($err) {
return (0, "Rails MySQL driver install failed : <pre>$err</pre>");
}

if ($upgrade) {
# Stop the running redmine server
&script_redmine_stop_server($d, $opts);
}

Extract tar file to temp dir and copy to target

local $temp = &transname();
local $err = &extract_script_archive($files->{‘source’}, $temp, $d,
$opts->{‘dir’}, “redmine-$ver”);
$err && return (0, “Failed to extract source : $err”);
local $cfilebase = “$opts->{‘dir’}/config/database.example.yml”;

if (!$upgrade) {
# Find a free port
$opts->{‘port’} = &allocate_mongrel_port(undef, $opts->{‘mongrels’});

# Setup DB config
local $cfile = &quot;$opts-&gt;{'dir'}/config/database.yml&quot;;
&amp;open_tempfile(CFILE, &quot;&gt;$cfile&quot;);
&amp;print_tempfile(CFILE,	&quot;production:\n&quot;.
			&quot;  adapter: mysql\n&quot;.
			&quot;  database: $dbname\n&quot;.
			&quot;  username: $dbuser\n&quot;.
			&quot;  password: $dbpass\n&quot;.
			&quot;  host: $dbhost\n&quot;);
&amp;print_tempfile(CFILE,	&quot;development:\n&quot;.
			&quot;  adapter: mysql\n&quot;.
			&quot;  database: $dbname\n&quot;.
			&quot;  username: $dbuser\n&quot;.
			&quot;  password: $dbpass\n&quot;.
			&quot;  host: $dbhost\n&quot;);
&amp;close_tempfile(CFILE);
&amp;set_ownership_permissions($d-&gt;{'uid'}, $d-&gt;{'ugid'}, undef, $cfile);

# Run the DB creation script
$out = &amp;run_as_domain_user($d, &quot;cd &quot;.quotemeta($opts-&gt;{'dir'}).&quot; &amp;&amp; &quot;.
			       &quot;rake db:migrate RAILS_ENV=production&quot;);
if ($?) {
	return (-1, &quot;Database creation failed : &lt;pre&gt;$out&lt;/pre&gt;&quot;);
	}
}

Fix up URL base

if ($opts->{‘path’} ne ‘/’) {
# In config file
local $efile = “$opts->{‘dir’}/config/environment.rb”;
local $lref = &read_file_lines($efile);
foreach my $l (@$lref) {
if ($l =~ /^#\sActionController::AbstractRequest.relative_url_root/) {
$l = “ActionController::AbstractRequest.relative_url_root = ‘$opts->{‘path’}’”;
}
}
&flush_file_lines($efile);

# In CSS file
local $cssfile = &quot;$opts-&gt;{'dir'}/public/stylesheets/redmine/mephisto.css&quot;;
local $lref = &amp;read_file_lines($cssfile);
local $path = $opts-&gt;{'path'};
foreach my $l (@$lref) {
	$l =~ s/url\(\/images/url\(${path}\/images/g;
	}
&amp;flush_file_lines($cssfile);

# In liquid.layout
local $lqfile = &quot;$opts-&gt;{'dir'}/themes/default/layouts/layout.liquid&quot;;
local $lref = &amp;read_file_lines($lqfile);
foreach my $l (@$lref) {
	$l =~ s/&lt;a\s+href=&quot;\/&quot;&gt;/&lt;a href=&quot;$path&quot;&gt;/;
	$l =~ s/action=&quot;\/search&quot;/action=&quot;$path\/search&quot;/;
	}
&amp;flush_file_lines($lqfile);
}

Create log dir if missing, for mongrel

local $logdir = “$opts->{‘dir’}/log”;
if (!-d $logdir) {
&make_dir($logdir, 0700);
&set_ownership_permissions($d->{‘uid’}, $d->{‘ugid’}, undef, $logdir);
}

Start the servers

local (@logs, @startcmds, @stopcmds);
local @ports = split(/\s+/, $opts->{‘port’});
local $err = &mongrel_rails_start_servers($d, $opts, “redmine”, @startcmds,
@stopcmds, @logs);
return (0, $err) if ($err);
$opts->{‘log’} = join(" ", @logs);

Setup an Apache proxy for it

&setup_mongrel_proxy($d, $opts->{‘path’}, $opts->{‘port’},
$opts->{‘path’} eq ‘/’ ? undef : $opts->{‘path’});

if (!$upgrade) {
# Configure server to start at boot
&setup_mongrel_startup($d,
join("\n", @startcmds),
join("\n", @stopcmds),
$opts,
1, "redmine-".$ports[0], "Mephisto Wiki");
}

if (!$upgrade) {
# Deny regular web access to directory
&protect_rails_directory($d, $opts);
}

local $url = &script_path_url($d, $opts);
local $adminurl = $url.“login”;
local $rp = $opts->{‘dir’};
$rp =~ s/^$d->{‘home’}///;
return (1, "redmine installation complete. Go to <a target=_new href=’$adminurl’>$adminurl</a> to manage it.<br />
", “Under $rp using $dbtype database $dbname”, $url, “admin”, “admin”);
}

script_redmine_uninstall(&domain, version, &opts)

Un-installs a redmine installation, by deleting the directory and database.

Returns 1 on success and a message, or 0 on failure and an error

sub script_redmine_uninstall
{
local ($d, $version, $opts) = @_;

Shut down the server process

&script_redmine_stop_server($d, $opts);

Remove bootup script

&delete_mongrel_startup($d, $opts, “mongrel_rails start”, $opts->{‘port’});

Remove the contents of the target directory

local $derr = &delete_script_install_directory($d, $opts);
return (0, $derr) if ($derr);

Remove proxy Apache config entry for /redmine

&delete_mongrel_proxy($d, $opts->{‘path’});
&register_post_action(&amp;restart_apache);

Remove all redmine tables from the database

local ($dbtype, $dbname) = split(/_/, $opts->{‘db’}, 2);
&require_mysql();
foreach $t (&mysql::list_tables($dbname)) {
if (&indexof($t, @redmine_tables) >= 0) {
&mysql::execute_sql_logged($dbname,
"drop table ".&mysql::quotestr($t));
}
}

Take out the DB

if ($opts->{‘newdb’}) {
&delete_script_database($d, $opts->{‘db’});
}

return (1, "redmine directory and tables deleted.");
}

script_redmine_stop(&domain, &sinfo)

Stop running mongrel process

sub script_redmine_stop
{
local ($d, $sinfo) = @_;
&script_redmine_stop_server($d, $sinfo->{‘opts’});
&delete_mongrel_startup($d, $sinfo->{‘opts’},
“mongrel_rails start”, $sinfo->{‘opts’}->{‘port’});
}

sub script_redmine_latest
{
return ( "http://rubyforge.org/frs/?group_id=1850",
"redmine-([0-9\.]+).tar.gz" );
}

sub script_redmine_start_server
{
local ($d, $opts) = @_;
return &mongrel_rails_start_servers($d, $opts, "redmine");
}

sub script_redmine_status_server
{
local ($d, $opts) = @_;
return &mongrel_rails_status_servers($d, $opts);
}

script_redmine_stop_server(&domain, &opts)

Stop an redmine webserver

sub script_redmine_stop_server
{
local ($d, $opts) = @_;
&mongrel_rails_stop_servers($d, $opts);
}

sub script_redmine_site
{
return ‘http://www.redmine.org/’;
}

1;

@redmine_tables = (

);

script_redmine_desc()

sub script_redmine_desc
{
return "redmine";
}

sub script_redmine_uses
{
return ( "ruby", "proxy" );
}

sub script_redmine_longdesc
{
return "Redmine is a flexible project management web application.";
}

script_redmine_versions()

sub script_redmine_versions
{
return ( "0.7.3" );
}

sub script_redmine_category
{
return "Project Management";
}

script_redmine_depends(&domain, version)

Check for ruby command, ruby gems, mod_proxy

sub script_redmine_depends
{
local ($d, $ver) = @_;
local @rv;
&has_command("ruby") || push(@rv, "The ruby command is not installed");
&require_apache();
&has_proxy_balancer($d) ||
push(@rv, "The Apache proxy module is not installed");
&has_domain_databases($d, [ "mysql" ]) ||
push(@rv, "redmine requires either MySQL database");
return @rv;
}

script_redmine_params(&domain, version, &upgrade-info)

Returns HTML for table rows for options for installing Redmine

sub script_redmine_params
{
local ($d, $ver, $upgrade) = @;
local $rv;
local $hdir = &public_html_dir($d, 1);
if ($upgrade) {
# Options are fixed when upgrading
local ($dbtype, $dbname) = split(/
/, $upgrade->{‘opts’}->{‘db’}, 2);
$rv .= &ui_table_row(“Database for redmine tables”, $dbname);
local $dir = $upgrade->{‘opts’}->{‘dir’};
$dir =~ s/^$d->{‘home’}///;
$rv .= &ui_table_row(“Install directory”, $dir);
}
else {
# Show editable install options
local @dbs = &domain_databases($d, [ “mysql” ]);
$rv .= &ui_table_row(“Database for redmine tables”,
&ui_database_select(“db”, undef, @dbs, $d, “redmine”));
$rv .= &ui_table_row(“Install sub-directory under <tt>$hdir</tt>”,
&ui_opt_textbox(“dir”, “redmine”, 30,
“At top level”));
$rv .= &show_mongrels_ports_input($d);
}
return $rv;
}

script_redmine_parse(&domain, version, &in, &upgrade-info)

Returns either a hash ref of parsed options, or an error string

sub script_redmine_parse
{
local ($d, $ver, $in, $upgrade) = @_;
if ($upgrade) {
# Options are always the same
return $upgrade->{‘opts’};
}
else {
local $hdir = &public_html_dir($d, 0);
$in->{‘dir_def’} || $in->{‘dir’} =~ /\S/ && $in->{‘dir’} !~ /../ ||
return “Missing or invalid installation directory”;
local $dir = $in->{‘dir_def’} ? $hdir : “$hdir/$in->{‘dir’}”;
local ($newdb) = ($in->{‘db’} =~ s/^*//);
local $mongrels = &parse_mongrels_ports_input($d, $in);
return $mongrels if (!int($mongrels));
return { ‘db’ => $in->{‘db’},
‘newdb’ => $newdb,
‘dir’ => $dir,
‘mongrels’ => $mongrels,
‘path’ => $in{‘dir_def’} ? “/” : “/$in{‘dir’}”,
};
}
}

script_redmine_check(&domain, version, &opts, &upgrade-info)

Returns an error message if a required option is missing or invalid

sub script_redmine_check
{
local ($d, $ver, $opts, $upgrade) = @;
if (-r “$opts->{‘dir’}/config/database.yml”) {
return “Redmine appears to be already installed in the selected directory”;
}
local ($dbtype, $dbname) = split(/
/, $opts->{‘db’}, 2);
foreach my $t (@redmine_tables) {
local $clash = &find_database_table($dbtype, $dbname, $t);
$clash && return “redmine appears to be already using the selected database (table $clash)”;
}
$opts->{‘mongrels’} ||= 1;
return undef;
}

script_redmine_files(&domain, version, &opts, &upgrade-info)

Returns a list of files needed by redmine, each of which is a hash ref

containing a name, filename and URL

sub script_redmine_files
{
local ($d, $ver, $opts, $upgrade) = @_;
local @files = ( { ‘name’ => “source”,
‘file’ => “redmine-$ver.tar.gz”,
‘url’ => “http://rubyforge.org/frs/download.php/39477/redmine-$ver.tar.gz” } );
}

sub script_redmine_commands
{
return ("ruby", "gcc", "make");
}

script_redmine_install(&domain, version, &opts, &files, &upgrade-info)

Actually installs PhpWiki, and returns either 1 and an informational

message, or 0 and an error

sub script_redmine_install
{
local ($d, $version, $opts, $files, $upgrade) = @_;
local ($out, $ex);

Check for the gem command (here instead of earlier, as it may have been

automatically installed).

&has_command("gem") || return (0, "The Ruby gem command is not installed");

Get database settings

if ($opts->{‘newdb’} && !$upgrade) {
local $err = &create_script_database($d, $opts->{‘db’});
return (0, “Database creation failed : $err”) if ($err);
}
local ($dbtype, $dbname) = split(/_/, $opts->{‘db’}, 2);
local $dbuser = &mysql_user($d);
local $dbpass = &mysql_pass($d);
local $dbhost = &get_database_host($dbtype);
local $dberr = &check_script_db_connection($dbtype, $dbname,
$dbuser, $dbpass);
return (0, “Database connection failed : $dberr”) if ($dberr);

Install mongrel first, as we need it to run redmine

local $err = &install_ruby_gem("mongrel", undef, 1);
if ($err) {
return (0, "Mongrel GEM install failed : <pre>$err</pre>");
}
if (!&find_rails_command("mongrel_rails")) {
return (0, "Mongrel appeared to install, but mongrel_rails command ".
"was not found");
}

Install Ruby on Rails

$err = &install_ruby_gem("rails", undef, 1);
if ($err) {
return (0, "Rails on Rails install failed : <pre>$err</pre>");
}

Install Ruby mysql driver

$err = &install_ruby_gem("mysql", undef, 1);
if ($err) {
return (0, "Rails MySQL driver install failed : <pre>$err</pre>");
}

if ($upgrade) {
# Stop the running redmine server
&script_redmine_stop_server($d, $opts);
}

Extract tar file to temp dir and copy to target

local $temp = &transname();
local $err = &extract_script_archive($files->{‘source’}, $temp, $d,
$opts->{‘dir’}, “redmine-$ver”);
$err && return (0, “Failed to extract source : $err”);
local $cfilebase = “$opts->{‘dir’}/config/database.example.yml”;

if (!$upgrade) {
# Find a free port
$opts->{‘port’} = &allocate_mongrel_port(undef, $opts->{‘mongrels’});

# Setup DB config
local $cfile = &quot;$opts-&gt;{'dir'}/config/database.yml&quot;;
&amp;open_tempfile(CFILE, &quot;&gt;$cfile&quot;);
&amp;print_tempfile(CFILE,	&quot;production:\n&quot;.
			&quot;  adapter: mysql\n&quot;.
			&quot;  database: $dbname\n&quot;.
			&quot;  username: $dbuser\n&quot;.
			&quot;  password: $dbpass\n&quot;.
			&quot;  host: $dbhost\n&quot;);
&amp;print_tempfile(CFILE,	&quot;development:\n&quot;.
			&quot;  adapter: mysql\n&quot;.
			&quot;  database: $dbname\n&quot;.
			&quot;  username: $dbuser\n&quot;.
			&quot;  password: $dbpass\n&quot;.
			&quot;  host: $dbhost\n&quot;);
&amp;close_tempfile(CFILE);
&amp;set_ownership_permissions($d-&gt;{'uid'}, $d-&gt;{'ugid'}, undef, $cfile);

# Run the DB creation script
$out = &amp;run_as_domain_user($d, &quot;cd &quot;.quotemeta($opts-&gt;{'dir'}).&quot; &amp;&amp; &quot;.
			       &quot;rake db:migrate RAILS_ENV=production&quot;);
if ($?) {
	return (-1, &quot;Database creation failed : &lt;pre&gt;$out&lt;/pre&gt;&quot;);
	}
}

Fix up URL base

if ($opts->{‘path’} ne ‘/’) {
# In config file
local $efile = “$opts->{‘dir’}/config/environment.rb”;
local $lref = &read_file_lines($efile);
foreach my $l (@$lref) {
if ($l =~ /^#\sActionController::AbstractRequest.relative_url_root/) {
$l = “ActionController::AbstractRequest.relative_url_root = ‘$opts->{‘path’}’”;
}
}
&flush_file_lines($efile);

# In CSS file
local $cssfile = &quot;$opts-&gt;{'dir'}/public/stylesheets/redmine/mephisto.css&quot;;
local $lref = &amp;read_file_lines($cssfile);
local $path = $opts-&gt;{'path'};
foreach my $l (@$lref) {
	$l =~ s/url\(\/images/url\(${path}\/images/g;
	}
&amp;flush_file_lines($cssfile);

# In liquid.layout
local $lqfile = &quot;$opts-&gt;{'dir'}/themes/default/layouts/layout.liquid&quot;;
local $lref = &amp;read_file_lines($lqfile);
foreach my $l (@$lref) {
	$l =~ s/&lt;a\s+href=&quot;\/&quot;&gt;/&lt;a href=&quot;$path&quot;&gt;/;
	$l =~ s/action=&quot;\/search&quot;/action=&quot;$path\/search&quot;/;
	}
&amp;flush_file_lines($lqfile);
}

Create log dir if missing, for mongrel

local $logdir = “$opts->{‘dir’}/log”;
if (!-d $logdir) {
&make_dir($logdir, 0700);
&set_ownership_permissions($d->{‘uid’}, $d->{‘ugid’}, undef, $logdir);
}

Start the servers

local (@logs, @startcmds, @stopcmds);
local @ports = split(/\s+/, $opts->{‘port’});
local $err = &mongrel_rails_start_servers($d, $opts, “redmine”, @startcmds,
@stopcmds, @logs);
return (0, $err) if ($err);
$opts->{‘log’} = join(" ", @logs);

Setup an Apache proxy for it

&setup_mongrel_proxy($d, $opts->{‘path’}, $opts->{‘port’},
$opts->{‘path’} eq ‘/’ ? undef : $opts->{‘path’});

if (!$upgrade) {
# Configure server to start at boot
&setup_mongrel_startup($d,
join("\n", @startcmds),
join("\n", @stopcmds),
$opts,
1, "redmine-".$ports[0], "Mephisto Wiki");
}

if (!$upgrade) {
# Deny regular web access to directory
&protect_rails_directory($d, $opts);
}

local $url = &script_path_url($d, $opts);
local $adminurl = $url.“login”;
local $rp = $opts->{‘dir’};
$rp =~ s/^$d->{‘home’}///;
return (1, "redmine installation complete. Go to <a target=_new href=’$adminurl’>$adminurl</a> to manage it.<br />
", “Under $rp using $dbtype database $dbname”, $url, “admin”, “admin”);
}

script_redmine_uninstall(&domain, version, &opts)

Un-installs a redmine installation, by deleting the directory and database.

Returns 1 on success and a message, or 0 on failure and an error

sub script_redmine_uninstall
{
local ($d, $version, $opts) = @_;

Shut down the server process

&script_redmine_stop_server($d, $opts);

Remove bootup script

&delete_mongrel_startup($d, $opts, “mongrel_rails start”, $opts->{‘port’});

Remove the contents of the target directory

local $derr = &delete_script_install_directory($d, $opts);
return (0, $derr) if ($derr);

Remove proxy Apache config entry for /redmine

&delete_mongrel_proxy($d, $opts->{‘path’});
&register_post_action(&amp;restart_apache);

Remove all redmine tables from the database

local ($dbtype, $dbname) = split(/_/, $opts->{‘db’}, 2);
&require_mysql();
foreach $t (&mysql::list_tables($dbname)) {
if (&indexof($t, @redmine_tables) >= 0) {
&mysql::execute_sql_logged($dbname,
"drop table ".&mysql::quotestr($t));
}
}

Take out the DB

if ($opts->{‘newdb’}) {
&delete_script_database($d, $opts->{‘db’});
}

return (1, "redmine directory and tables deleted.");
}

script_redmine_stop(&domain, &sinfo)

Stop running mongrel process

sub script_redmine_stop
{
local ($d, $sinfo) = @_;
&script_redmine_stop_server($d, $sinfo->{‘opts’});
&delete_mongrel_startup($d, $sinfo->{‘opts’},
“mongrel_rails start”, $sinfo->{‘opts’}->{‘port’});
}

sub script_redmine_latest
{
return ( "http://rubyforge.org/frs/?group_id=1850",
"redmine-([0-9\.]+).tar.gz" );
}

sub script_redmine_start_server
{
local ($d, $opts) = @_;
return &mongrel_rails_start_servers($d, $opts, "redmine");
}

sub script_redmine_status_server
{
local ($d, $opts) = @_;
return &mongrel_rails_status_servers($d, $opts);
}

script_redmine_stop_server(&domain, &opts)

Stop an redmine webserver

sub script_redmine_stop_server
{
local ($d, $opts) = @_;
&mongrel_rails_stop_servers($d, $opts);
}

sub script_redmine_site
{
return ‘http://www.redmine.org/’;
}

1;