我已将emdedly-ruby gem(https://github.com/embedly/embedly-ruby)添加到我的社交书签应用程序中。嵌入从网址中提取图像并将url链接替换为我的应用程序中的图像。它在本地完美运行,但它在生产中并不起作用(Heroku)。我是编程新手,我不知道如何在生产中捕获错误。我们欢迎所有的建议!
这是我的bookmark.rb模型文件:
class Bookmark < ActiveRecord::Base
#attr_accessible :thumbnail_url
has_many :bookmark_topics
has_many :topics, through: :bookmark_topics
has_many :user_bookmarks
has_many :users, through: :user_bookmarks
has_many :likes, dependent: :destroy
default_scope { order('updated_at DESC') }
after_create :set_embedly_url
private
def set_embedly_url
embedly_api = Embedly::API.new :key => ENV['EMBEDLY_API_KEY'],
:user_agent => 'Mozilla/5.0 (compatible; mytestapp/1.0; my@email.com)'
Rails.logger.info ">>>> embedluy object: #{embedly_api.inspect}"
obj = embedly_api.extract :url => self.url
Rails.logger.info ">>>> embedly obj: #{obj.inspect}"
# get result and find the attribute for the thumbnail_url
# set the bookmark's thumbnail_url with that value -- update_attribute(thumbnail_url: val_of_thumbnail_url_from_response)
o = obj.first
Rails.logger.info ">>>> o: #{o.inspect}"
image = o.images.first
Rails.logger.info ">>>>> image: #{image.inspect}"
update_attribute(:thumbnail_url, image['url'])
Rails.logger.info ">>>> Now i am: #{self.inspect}"
true
end
end
这是我在views +中的bookmark.html.erb部分文件:
<div class="btn-group">
<% show_remove_button ||= false %>
<li>
<div class="bookmark_container">
<div class="thumbnail">
<% link_text = bookmark.thumbnail_url.present? ? "<img src='#{bookmark.thumbnail_url}'/>".html_safe : bookmark.url %>
<%= link_to link_text, bookmark.url %>
</div>
</div>
<% if current_user %>
<div class="like">
<% if show_remove_button %>
<% user_bookmark = get_user_bookmark_for(bookmark) %>
<% if user_bookmark %>
<%= link_to "Remove", user_bookmark_path(user_bookmark), class: 'btn btn-danger', method: :delete %>
<% end %>
<% else %>
<% if like = current_user.liked(bookmark) %>
<%= link_to [bookmark, like], class: 'btn btn-info', method: :delete do %> Unlike <% end %>
<% else %>
<%= link_to [bookmark, Like.new], class: 'btn btn-info', method: :post do %> Like <% end %>
<% end %>
<% end %>
</div>
<% end %>
</li>
这是我的javascript文件夹中的application.js文件:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap
//= require_tree .
这是我的gemfile:
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.5'
group :development, :test do
gem 'rspec-rails'
gem 'capybara'
end
group :production do
gem 'pg'
gem 'rails_12factor'
end
group :development do
gem 'sqlite3'
end
gem 'bootstrap-sass', '~> 3.1.1'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.2'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.2'
group :doc do
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', require: false
end
gem 'devise'
gem 'faker'
gem 'figaro'
gem 'embedly'
如果您还有其他想要查看的文件,请与我们联系。我还在http://embed.ly/docs/api/tutorials阅读了嵌入式教程,但我并没有在我的代码中使用jquery来实现嵌入式工作,正如他们在教程中使用的那样。您是否认为我需要在代码中使用jquery才能使其正常工作?但那么为什么会在没有jquery而不是生产的情况下在本地工作呢?
答案 0 :(得分:1)
粗略地看一下你的代码之后,我无法确定它为什么不能在Production中工作,如果它在本地工作,但这里有一些调试思路。
首先,尝试具体(在您自己的调试中并使用SO),关于“不工作”的含义。它是否会抛出错误(何时/何时/如何)?是否打印没有嵌入行为的链接?它是否将完整的Embedly链接打印为HTML字符串?等等。这将帮助您/我们缩小范围。
一旦你更准确地了解出了什么问题,下面是调试的下一步:
EMBEDLY_API_KEY
),或者某些类似的工具设置问题或 b),您尚未迁移Heroku上的thumbnail_url
列,或导致数据库问题的内容。 在任何一种情况下,您都可以通过在生产中生成错误然后从控制台运行
heroku logs
来获取最新生产服务器日志的视图,从而最好地诊断此问题。您也可以heroku logs --tail
来获取正在运行的日志。这些可以帮助您查看任何错误,并且还可以看到,因为您的puts
语句,什么是成功运行和未成功运行。
要诊断这一点,请在Web Inspector中打开JavaScript控制台(我相信Mac上的CMD + Shift + J),看看是否有任何JS错误,无论是加载文件(您的嵌入式库等)还是你的JS文件本身。这可能与Heroku如何处理资产管道有关。如果是这种情况,请查看Rails Guide to the Asset Pipeline以获得一些重/有趣的阅读。
希望有所帮助!