我正在尝试使用Link Thumbnailer从食谱网站获取标题,图片和说明,出于某种原因,当我提供网站的网址时,我一直收到BadUriFormat
错误
在我看来,我有:
<% @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
调用方法之间的区别是什么?
答案 0 :(得分:0)
写下我的评论作为答案。您的@recipes
数组必须包含一个空白值,这会导致gem引发BadUriFormat
异常。
此外,我建议使用以下选项以避免宝石在获取网站时进行不必要的计算:
LinkThumbnailer.generate(url, attributes: [:images], image_limit: 1, image_stats: false)
attributes
- 告诉宝石只关心图片image_limit
- 告诉gem只获取一张图片。但它可能不是最好的,因为它不会尝试获取多个图像。image_stats
- 告诉宝石不关心图片大小和类型