I enabled PUT requests by adding this to my site configuration:

Alias /ivy /home/ivy
<Directory /home/ivy/>
   DAV On
   <LimitExcept MKCOL GET HEAD OPTIONS PUT>
      Allow from all
   </LimitExcept>
AuthType Basic
   AuthName "Ivy Repository"
AuthBasic Provider ldap
   # Followed by LDAP configuration directives.
</Directory>

I'm running Ubuntu, and I have a stock Apache2 webserver installed, via apt-get (version 2.2.12). I didn't need to enable mod_put or anything for this to work with a standard curl command that just puts a file into /home/ivy. eg:

curl -u [username:password] -T [file] http://[server]/ivy/[target filename]

Using curl to issue MKCOL commands also works:

curl -u [username:password] -X MKCOL http://[server]/ivy/[dir to create]

I haven't been able to find much about mod_put on google - is it still relevant? My hypothesis is that the functionality it provides is now built-in to the webserver or provided by another module, since I am definitely able to do PUTs without it. This, which I just found, indicates that the functionality is now provided by mod_dav, which I have enabled:

http://objectmix.com/apache/651126-mod_put-apache2.html

Is there a reason that Ivy can't or shouldn't simply issue the MKCOL requests before issuing the PUT request? That seems like it would be a more elegant solution than requiring customizations to the webserver to create the subdirectories.

eg: publishing www.myserver.com/ivy/org/product/1.0/ivys/ivy.xml
results in:
   MKCOL www.myserver.com/ivy
   MKCOL www.myserver.com/ivy/org
   MKCOL www.myserver.com/ivy/org/product
   MKCOL www.myserver.com/ivy/org/product/1.0
   MKCOL www.myserver.com/ivy/org/product/1.0/ivys
   PUT www.myserver.com/ivy/org/product/1.0/ivys/ivy.xml

I will try to figure out how to configure Apache to support creating the dirs automatically when I have some time for it... In the meanwhile, I have also worked around the issue by setting up openssh on the target server so that I can use an SSH resolver.

Thanks,


Mike.
How did you enable the PUT requests in Apache?

I think the mod_put modules listed here might create the missing directories:
http://www.gknw.net/development/apache/httpd-2.0/unix/modules/

I couldn't try them though, so I might be mistaken...

Maarten


----- Original Message ----
From: Michael Shea <[email protected]>
To: [email protected]
Sent: Tue, April 6, 2010 5:58:46 PM
Subject: Re: publishing via http

Hi Maarten,

Yes, my apache server is configured to accept HTTP PUT requests.

I've done some debugging using curl to PUT files on the server, and yeah, it looks like the server doesn't create the required subdirectories. So... Is creating the necessary subdirectories (or "collections", in webdav-speak?) when receiving a PUT request a standard thing that webservers do? I presume that it isn't.

So the question I have is:

Is this a "bug" in Ivy, that Ivy doesn't send the necessary MKCOL commands first? Or is this something that is undesirable to have Ivy do for some reason? I know that there's the VFS stuff as well, presumably that would issue the MKCOL commands. It's not really an option for me though, since I want to use this in a production environment where we require stability, and we're not too keen on using projects that haven't ever actually been released (ie: commons-vfs).

Anyway - it just looks to me like the usefulness of using URL resolvers for publishing is severely limited, given that what Ivy actually tries to do when doing an http publish isn't supported by Apache webserver without writing a custom put-script. Maybe if it's not a bug, something in the docs would be useful?


Mike Shea.

Is your apache server configured to accept HTTP PUT requests?
If so, mabye you should use another put-script that creates the missing 
directories?

Maarten




----- Original Message ----
From: Michael Shea <[email protected]>
To: [email protected]
Sent: Thu, April 1, 2010 11:54:58 PM
Subject: publishing via http

Hi folks,

I am trying to publish to an HTTP Ivy repository, and having some trouble with 
it. I'm using ivy-2.1.0.

The resolver I am using in ivysettings.xml looks like this:

       <url name="shared-publisher">
           <ivy 
pattern="http://${server}/${infrastructure.lib.dir}/${ivy.artifact.pattern}"; />
           <artifact 
pattern="http://${server}/${infrastructure.lib.dir}/${ivy.artifact.pattern}"; />
       </url>


Basically, I get this in the logs from my ant build when I call ivy:publish:

Caused by: java.io.IOException: Access to URL 
http://[server]/lib/nitido/project24/1.0.0.0/zips/project24-resources.zip was 
refused by the server

If I check the apache logs on the server, I see this:

<snip>
192.168.13.68 - - [01/Apr/2010:17:38:56 -0400] "HEAD 
/lib/nitido/project24/1.0.0.0/zips/project24-resources.zip HTTP/1.1" 401 224 "-" "Apache 
Ivy/2.1.0"
192.168.13.68 - [email protected] [01/Apr/2010:17:38:56 -0400] "HEAD 
/lib/nitido/project24/1.0.0.0/zips/project24-resources.zip HTTP/1.1" 404 163 "-" "Apache 
Ivy/2.1.0"
192.168.13.68 - - [01/Apr/2010:17:38:56 -0400] "PUT 
/lib/nitido/project24/1.0.0.0/zips/project24-resources.zip HTTP/1.1" 401 741 "-" "Apache 
Ivy/2.1.0"
192.168.13.68 - [email protected] [01/Apr/2010:17:38:56 -0400] "PUT 
/lib/nitido/project24/1.0.0.0/zips/project24-resources.zip HTTP/1.1" 403 538 "-" "Apache 
Ivy/2.1.0"
</snip>

It looks to me like it's trying to just run a PUT without creating the 
necessary subdirectories first...?

I've also tried messing around with the vfs resolver (compiled my own 
commons-vfs jar, based on the 1.0 tag from the vfs svn repo), but I didn't have 
any luck with it.

I haven't found much about this on google... bits and pieces here and there, 
but nothing that has really helped me yet. Is what I am trying to do even 
possible currently? Or should I just abandon this approach, and set up an FTP 
server to handle publishing instead? =)

Thanks,


Mike Shea.





Reply via email to