You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Matt Mitchell <mw...@virginia.edu> on 2007/09/11 15:36:57 UTC

Using Ruby to POST to Solr

Hi, I just posted this to the ruby/google group. It probably belongs  
here! Also, anyone know exactly what the @ symbol in the curl command  
is doing?
Thanks,
Matt


I've got a script that uses curl, and would like (for educational
purposes mind you) to use ruby instead. This is the curl command that
works:

F="./my_data.xml"
curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
type:text/xml; charset=utf-8'

I've been messing with Net::Http using something like below, with
variations (Base64.encode64) but nothing works yet. Anyone know the
ruby equivlent to the curl version above?

Thanks!

# NOT WORKING:
my_url = 'http://localhost:8080/update'
data = File.read('my_data.xml')
url = URI.parse(my_url)
post = Net::HTTP::Post.new(url.path)
post.body = data
post.content_type = 'application/x-www-form-urlencoded; charset=utf-8'
   response = Net::HTTP.start(url.host, url.port) do |http|
     http.request(post)
   end
puts response.body

Re: Using Ruby to POST to Solr

Posted by Matt Mitchell <mw...@virginia.edu>.
Yes! Beautiful. I'll be checking that out.

matt

On Sep 11, 2007, at 12:18 PM, Erik Hatcher wrote:

> Matt,
>
> Try this instead:
>
>   gem install solr-ruby # ;)
>
> Then in irb or wherever:
>
>   solr = Solr::Connection.new("http://localhost:8983/solr")
>   solr.add(:id => 123, :title => "<insert title here>")
>   solr.commit
>   solr.query("title")
>
> Visit us over on the ruby-dev@lucene.apache.org e-mail list for  
> more on working with Solr from Ruby.
>
> 	Erik
>
>
> On Sep 11, 2007, at 10:55 AM, Matt Mitchell wrote:
>
>> Hi Michael,
>>
>> Thanks for that. I've got something that's working now:
>>
>> data = File.read('my_solr_docs.xml')
>> url = URI.parse('http://localhost:8080/my_solr/update')
>> http = Net::HTTP.new(url.host, url.port)
>> response, body = http.post(url.path, data, {'Content-type'=>'text/ 
>> xml; charset=utf-8'})
>>
>> Matt
>>
>> On Sep 11, 2007, at 9:42 AM, Michael Kimsal wrote:
>>
>>> The curl man page states:
>>>
>>>               If you start the data with the letter @, the rest  
>>> should be a
>>> file name to read the data from, or - if you want curl to read  
>>> the data
>>>               from  stdin.   The  contents  of the file must  
>>> already be
>>> url-encoded. Multiple files can also be specified. Posting data  
>>> from a file
>>>               named 'foobar' would thus be done with --data  
>>> @foobar".
>>>
>>>
>>>
>>>
>>> On 9/11/07, Matt Mitchell <mw...@virginia.edu> wrote:
>>>>
>>>> Hi, I just posted this to the ruby/google group. It probably  
>>>> belongs
>>>> here! Also, anyone know exactly what the @ symbol in the curl  
>>>> command
>>>> is doing?
>>>> Thanks,
>>>> Matt
>>>>
>>>>
>>>> I've got a script that uses curl, and would like (for educational
>>>> purposes mind you) to use ruby instead. This is the curl command  
>>>> that
>>>> works:
>>>>
>>>> F="./my_data.xml"
>>>> curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
>>>> type:text/xml; charset=utf-8'
>>>>
>>>> I've been messing with Net::Http using something like below, with
>>>> variations (Base64.encode64) but nothing works yet. Anyone know the
>>>> ruby equivlent to the curl version above?
>>>>
>>>> Thanks!
>>>>
>>>> # NOT WORKING:
>>>> my_url = 'http://localhost:8080/update'
>>>> data = File.read('my_data.xml')
>>>> url = URI.parse(my_url)
>>>> post = Net::HTTP::Post.new(url.path)
>>>> post.body = data
>>>> post.content_type = 'application/x-www-form-urlencoded;  
>>>> charset=utf-8'
>>>>    response = Net::HTTP.start(url.host, url.port) do |http|
>>>>      http.request(post)
>>>>    end
>>>> puts response.body
>>>
>>>
>>>
>>>
>>> -- 
>>> Michael Kimsal
>>> http://webdevradio.com
>>
>> Matt Mitchell
>> Digital Scholarship Services
>> Box 400129
>> Alderman Library
>> University of Virginia
>> Charlottesville, VA 22904
>>
>> mwm4n@virginia.edu
>>
>>

Matt Mitchell
Digital Scholarship Services
Box 400129
Alderman Library
University of Virginia
Charlottesville, VA 22904

mwm4n@virginia.edu



Re: Using Ruby to POST to Solr

Posted by Erik Hatcher <er...@ehatchersolutions.com>.
Matt,

Try this instead:

   gem install solr-ruby # ;)

Then in irb or wherever:

   solr = Solr::Connection.new("http://localhost:8983/solr")
   solr.add(:id => 123, :title => "<insert title here>")
   solr.commit
   solr.query("title")

Visit us over on the ruby-dev@lucene.apache.org e-mail list for more  
on working with Solr from Ruby.

	Erik


On Sep 11, 2007, at 10:55 AM, Matt Mitchell wrote:

> Hi Michael,
>
> Thanks for that. I've got something that's working now:
>
> data = File.read('my_solr_docs.xml')
> url = URI.parse('http://localhost:8080/my_solr/update')
> http = Net::HTTP.new(url.host, url.port)
> response, body = http.post(url.path, data, {'Content-type'=>'text/ 
> xml; charset=utf-8'})
>
> Matt
>
> On Sep 11, 2007, at 9:42 AM, Michael Kimsal wrote:
>
>> The curl man page states:
>>
>>               If you start the data with the letter @, the rest  
>> should be a
>> file name to read the data from, or - if you want curl to read the  
>> data
>>               from  stdin.   The  contents  of the file must  
>> already be
>> url-encoded. Multiple files can also be specified. Posting data  
>> from a file
>>               named 'foobar' would thus be done with --data @foobar".
>>
>>
>>
>>
>> On 9/11/07, Matt Mitchell <mw...@virginia.edu> wrote:
>>>
>>> Hi, I just posted this to the ruby/google group. It probably belongs
>>> here! Also, anyone know exactly what the @ symbol in the curl  
>>> command
>>> is doing?
>>> Thanks,
>>> Matt
>>>
>>>
>>> I've got a script that uses curl, and would like (for educational
>>> purposes mind you) to use ruby instead. This is the curl command  
>>> that
>>> works:
>>>
>>> F="./my_data.xml"
>>> curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
>>> type:text/xml; charset=utf-8'
>>>
>>> I've been messing with Net::Http using something like below, with
>>> variations (Base64.encode64) but nothing works yet. Anyone know the
>>> ruby equivlent to the curl version above?
>>>
>>> Thanks!
>>>
>>> # NOT WORKING:
>>> my_url = 'http://localhost:8080/update'
>>> data = File.read('my_data.xml')
>>> url = URI.parse(my_url)
>>> post = Net::HTTP::Post.new(url.path)
>>> post.body = data
>>> post.content_type = 'application/x-www-form-urlencoded;  
>>> charset=utf-8'
>>>    response = Net::HTTP.start(url.host, url.port) do |http|
>>>      http.request(post)
>>>    end
>>> puts response.body
>>
>>
>>
>>
>> -- 
>> Michael Kimsal
>> http://webdevradio.com
>
> Matt Mitchell
> Digital Scholarship Services
> Box 400129
> Alderman Library
> University of Virginia
> Charlottesville, VA 22904
>
> mwm4n@virginia.edu
>
>


Re: Using Ruby to POST to Solr

Posted by Matt Mitchell <mw...@virginia.edu>.
Hi Michael,

Thanks for that. I've got something that's working now:

data = File.read('my_solr_docs.xml')
url = URI.parse('http://localhost:8080/my_solr/update')
http = Net::HTTP.new(url.host, url.port)
response, body = http.post(url.path, data, {'Content-type'=>'text/ 
xml; charset=utf-8'})

Matt

On Sep 11, 2007, at 9:42 AM, Michael Kimsal wrote:

> The curl man page states:
>
>               If you start the data with the letter @, the rest  
> should be a
> file name to read the data from, or - if you want curl to read the  
> data
>               from  stdin.   The  contents  of the file must  
> already be
> url-encoded. Multiple files can also be specified. Posting data  
> from a file
>               named 'foobar' would thus be done with --data @foobar".
>
>
>
>
> On 9/11/07, Matt Mitchell <mw...@virginia.edu> wrote:
>>
>> Hi, I just posted this to the ruby/google group. It probably belongs
>> here! Also, anyone know exactly what the @ symbol in the curl command
>> is doing?
>> Thanks,
>> Matt
>>
>>
>> I've got a script that uses curl, and would like (for educational
>> purposes mind you) to use ruby instead. This is the curl command that
>> works:
>>
>> F="./my_data.xml"
>> curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
>> type:text/xml; charset=utf-8'
>>
>> I've been messing with Net::Http using something like below, with
>> variations (Base64.encode64) but nothing works yet. Anyone know the
>> ruby equivlent to the curl version above?
>>
>> Thanks!
>>
>> # NOT WORKING:
>> my_url = 'http://localhost:8080/update'
>> data = File.read('my_data.xml')
>> url = URI.parse(my_url)
>> post = Net::HTTP::Post.new(url.path)
>> post.body = data
>> post.content_type = 'application/x-www-form-urlencoded;  
>> charset=utf-8'
>>    response = Net::HTTP.start(url.host, url.port) do |http|
>>      http.request(post)
>>    end
>> puts response.body
>
>
>
>
> -- 
> Michael Kimsal
> http://webdevradio.com

Matt Mitchell
Digital Scholarship Services
Box 400129
Alderman Library
University of Virginia
Charlottesville, VA 22904

mwm4n@virginia.edu



Re: Using Ruby to POST to Solr

Posted by Michael Kimsal <mg...@gmail.com>.
The curl man page states:

              If you start the data with the letter @, the rest should be a
file name to read the data from, or - if you want curl to read the data
              from  stdin.   The  contents  of the file must already be
url-encoded. Multiple files can also be specified. Posting data from a file
              named 'foobar' would thus be done with --data @foobar".




On 9/11/07, Matt Mitchell <mw...@virginia.edu> wrote:
>
> Hi, I just posted this to the ruby/google group. It probably belongs
> here! Also, anyone know exactly what the @ symbol in the curl command
> is doing?
> Thanks,
> Matt
>
>
> I've got a script that uses curl, and would like (for educational
> purposes mind you) to use ruby instead. This is the curl command that
> works:
>
> F="./my_data.xml"
> curl 'http://localhost:8080/update' --data-binary @$F -H 'Content-
> type:text/xml; charset=utf-8'
>
> I've been messing with Net::Http using something like below, with
> variations (Base64.encode64) but nothing works yet. Anyone know the
> ruby equivlent to the curl version above?
>
> Thanks!
>
> # NOT WORKING:
> my_url = 'http://localhost:8080/update'
> data = File.read('my_data.xml')
> url = URI.parse(my_url)
> post = Net::HTTP::Post.new(url.path)
> post.body = data
> post.content_type = 'application/x-www-form-urlencoded; charset=utf-8'
>    response = Net::HTTP.start(url.host, url.port) do |http|
>      http.request(post)
>    end
> puts response.body




-- 
Michael Kimsal
http://webdevradio.com