Rails 4: неверный формат URI для создания эскизов ссылок

#ruby-on-rails #ruby-on-rails-4 #url #uri

#ruby-on-rails #ruby-on-rails-4 #url #uri

Вопрос:

Я пытаюсь использовать средство создания эскизов ссылок для извлечения заголовка, изображения и описания с веб-сайта рецептов, и по какой-то причине я продолжаю получать BadUriFormat сообщение об ошибке, когда указываю URL-адрес веб-сайта.

На мой взгляд, у меня есть:

 <% @recipes.each do |recipe| %>

  <tr>
    <td class="recipe-info">
        <%= image_tag LinkThumbnailer.generate(recipe.image_link).images.first.src.to_s %>
    </td>
  </tr>
  

… и рецепт в этом примере:

 #<Recipe:0x007fe48394a358> {
    :id => 1,
    :name => "test",
    :image_link => "http://paleoleap.com/simple-beef-shish-kabobs/"
}
  

Вот моя ошибка:

 ETHON: started MULTI
ETHON:         performed EASY effective_url=http://res.cloudinary.com/paleoleap/image/upload/f_auto,q_90/v1459886762/j-paleo/simple-beef-shish-kabob-main.jpg response_code=200 return_code=write_error total_time=0.04831799999999997
ETHON: performed MULTI
ETHON: started MULTI
ETHON:         performed EASY effective_url=http://paleoleap.com/pictures/icons/servings.png response_code=200 return_code=write_error total_time=0.053881
ETHON: performed MULTI
ETHON: started MULTI
ETHON:         performed EASY effective_url=http://paleoleap.com/pictures/icons/prep3.png response_code=200 return_code=write_error total_time=0.050677
ETHON: performed MULTI
ETHON: started MULTI
ETHON:         performed EASY effective_url=http://paleoleap.com/pictures/icons/cooking4.png response_code=200 return_code=write_error total_time=0.044727
ETHON: performed MULTI
ETHON: started MULTI
ETHON:         performed EASY effective_url=http://res.cloudinary.com/paleoleap/image/upload/f_auto,q_90/v1459886762/j-paleo/simple-beef-shish-kabob-preparation.jpg response_code=200 return_code=write_error total_time=0.048975
ETHON: performed MULTI
  Rendered recipes/index.html.erb within layouts/application (510.5ms)
Completed 500 Internal Server Error in 1040ms (ActiveRecord: 7.3ms)

LinkThumbnailer::BadUriFormat (LinkThumbnailer::BadUriFormat):
  app/views/recipes/index.html.erb:46:in `block in _app_views_recipes_index_html_erb___148801017206438179_70110103402900'
  app/views/recipes/index.html.erb:26:in `_app_views_recipes_index_html_erb___148801017206438179_70110103402900'
  

Когда я извлекаю изображение в своем контроллере, выполняя LinkThumbnailer.generate(Recipe.find(1)) его, он работает без проблем.

Вот успех:

 ETHON: started MULTI
ETHON:         performed EASY effective_url=http://res.cloudinary.com/paleoleap/image/upload/f_auto,q_90/v1459886762/j-paleo/simple-beef-shish-kabob-main.jpg response_code=200 return_code=write_error total_time=0.056864
ETHON: performed MULTI
ETHON: started MULTI
ETHON:         performed EASY effective_url=http://paleoleap.com/pictures/icons/servings.png response_code=200 return_code=write_error total_time=0.04847
ETHON: performed MULTI
ETHON: started MULTI
ETHON:         performed EASY effective_url=http://paleoleap.com/pictures/icons/prep3.png response_code=200 return_code=write_error total_time=0.04541
ETHON: performed MULTI
ETHON: started MULTI
ETHON:         performed EASY effective_url=http://paleoleap.com/pictures/icons/cooking4.png response_code=200 return_code=write_error total_time=0.039456
ETHON: performed MULTI
ETHON: started MULTI
ETHON:         performed EASY effective_url=http://res.cloudinary.com/paleoleap/image/upload/f_auto,q_90/v1459886762/j-paleo/simple-beef-shish-kabob-preparation.jpg response_code=200 return_code=write_error total_time=0.0386
ETHON: performed MULTI
  

В чем разница между вызовом generate метода recipe.image_link в моем цикле и вызовом его на определенном Recipe в контроллере?

Комментарии:

1. Я вижу, что вы зацикливаетесь на массиве @recipes , не могли бы вы отобразить значение этого массива? Я подозреваю пустое значение в вашем массиве, которое вызовет BadUriFormat исключение

2. О боже. У меня было ощущение, что это что-то глупое. У моего второго recipe не :image_link было.

Ответ №1:

Записываю мой комментарий в качестве ответа. Ваш @recipes массив должен содержать пустое значение, из-за которого gem вызывает BadUriFormat исключение.

Кроме того, я бы предложил следующие варианты, чтобы избежать ненужных вычислений с помощью gem при загрузке веб-сайта:


LinkThumbnailer.generate(url, attributes: [:images], image_limit: 1, image_stats: false)

  • attributes — скажет драгоценному камню заботиться только об изображениях
  • image_limit — укажет драгоценному камню только одно изображение. Однако он может быть не самым лучшим, поскольку он не будет пытаться получить более одного изображения.
  • image_stats — скажет драгоценному камню не заботиться о размере и типе изображений