#ruby-on-rails #ruby #post #heroku
#ruby-on-rails #ruby #Публикация #heroku
Вопрос:
Я создал простое приложение ROR на сервере Heroku и хочу добавить продукт, используя скрипт RUBY:
требуется ‘rubygems’ требуется ‘rest_client’
RestClient.post ‘http://falling-ice-5948.herokuapp.com/products/new ‘, :title => ‘TESTTESTTEST’, :description => «MYTESTTESTTESTTEST», :image_url => «TESTTESTNULL.jpg «, :цена => 4.50
Вот моя страница:
Когда я запускаю свой скрипт, он выдает ошибку:
ruby postEasy.rb /usr/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/abstract_response.rb:48:в
return!': 404 Resource Not Found (RestClient::ResourceNotFound) from
process_result’ из /usr/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:178:в
/usr/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:230:in
transmit' from /usr/lib/ruby/1.8/net/http.rb:543:in
start’ из /usr/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:172:вtransmit' from
execute’ из /usr/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:33:в
/usr/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in
execute' from
post’ из postEasy.rb:4
/usr/lib/ruby/gems/1.8/gems/rest-client-1.6.7/lib/restclient.rb:72:in
Есть идеи?
Заранее спасибо
Комментарии:
1. Вы просто хотите создать продукт? Если это так, вы также можете сделать это в консоли rails на heroku с
$ heroku console
помощью .2. Я хочу создать scrpit ruby, который делает это автоматически. Вы понимаете?
3. Итак, вы на самом деле просто хотите заполнить свою базу данных записями, верно?
4. Почти … Fe: я дам вам этот скрипт, и вы сможете использовать его для добавления своих продуктов. возможно, это важно на сервере Heroku…
5. Зачем вам вообще это делать? Есть ли веская причина для добавления продуктов через какой-либо HTTP API?
Ответ №1:
Вам нужно будет вложить параметры в RestClient.post
метод. Скорее всего, вы ищете params[:product]
в своем действии, но для этого не будет никаких данных. Я тестировал ваше приложение heroku, извините за это, но это сработает (как и у меня):
RestClient.post 'http://falling-ice-5948.herokuapp.com/products',
:product => {
:title => 'foobarbazfoobarbaz',
:description => "foobarbazfoobarbaz description",
:image_url => "foobarbazfoobarbaz.jpg",
:price => 42.00
}
Комментарии:
1. Хм, для моего сообщения должна быть кнопка «проверить».
Ответ №2:
Я не знаю подробностей вашего приложения, но я ожидаю, что вы вызовете запрос POST на http://falling-ice-5948.herokuapp.com/products / нет http://falling-ice-5948.herokuapp.com/products/new .
ПОЛУЧИТЬ http://falling-ice-5948.herokuapp.com/products/new извлек бы форму для создания новой записи.
Комментарии:
1. Я пытаюсь сделать это таким образом: RestClient.post ‘ falling-ice-5948.herokuapp.com/products ‘, {:действие =>»создать», : контроллер => «продукты», :заголовок => ‘ТЕСТТЕСТТЕСТ’, :описание => «MYTESTTESTTESTEST», :image_url => «TESTTESTNULL.jpg «, :цена =>4.50 } но он все равно не работает
2. Вы пробовали точно так же, как в примере, который вы опубликовали изначально, но просто удалили new из конца URL-адреса?
Ответ №3:
Проверьте вывод rake routes
. Это покажет методы для настроенных вами маршрутов и доступные методы. Я подозреваю, что /products/new будет отображаться как GET, в то время как /products как POST — это то, что вы на самом деле хотите делать.
Кстати, это тоже произошло бы локально, так что это не имеет никакого отношения к Heroku.
Комментарии:
1. продукты ПОЛУЧАЮТ /products(.:format) {:action=>»index», :controller=>»products»} POST /products(.:format) {:action=>»create», :controller=>»products»} new_product ПОЛУЧАЕТ /products/new(.:format) {:action=>»new», :controller=>»products»} edit_product GET /products/:id/edit(.:format) {:action=>»edit», :controller=>»products» } product GET /products/:id(.:format) {:action=>»показать», :controller=>»продукты»} PUT /products/:id(.:format) {:action=>»обновить», :controller=>»продукты»} Какой из них я должен использовать и как?
2. POST /products(.:format) {:action=>»создать»,:controller =>»продукты»} является решающим. Измените свой код на; RestClient.post ‘ falling-ice-5948.herokuapp.com/products ‘, :title => ‘TESTTESTTEST’, :description => «MYTESTTESTTESTTEST», :image_url => «TESTTESTNULL.jpg «, :цена => 4.50