1

我已将 emdedly-ruby gem ( https://github.com/embedly/embedly-ruby ) 添加到我的社交书签应用程序中。嵌入从 url 中提取图像,并将 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

这是我在视图中的 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 .

这是我的宝石文件:

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 的本地工作而不是在生产环境中工作呢?

4

1 回答 1

1

粗略查看您的代码后,我无法确定为什么它不能在生产环境中工作,如果它在本地工作,但这里有一些调试想法。

首先,尝试具体说明“不工作”的含义(在您自己的调试和 SO 中)。它是否抛出错误(在哪里/何时/如何)?它是否打印没有嵌入行为的链接?是否将完整的嵌入链接打印为 HTML 字符串?等等。这将帮助您/我们缩小范围。

一旦您更准确地了解出了什么问题,以下是调试的一些后续步骤:

  • 如果它抛出错误,那可能是因为a),您没有在 Production 中包含必要且在本地包含的 Embedly 环境变量(例如EMBEDLY_API_KEY),或一些类似的工具设置问题,或者b),您还没有迁移Heroku 上的thumbnail_url专栏,或导致数据库问题的内容。

heroku logs在任何一种情况下,您都可以通过在生产环境中生成错误然后从控制台运行以查看最新的生产服务器日志来最好地诊断此问题。您也可以heroku logs --tail获取运行日志。这些将帮助您查看任何错误,并且还可以查看由于您的puts陈述而成功运行和未成功运行的内容。

  • 如果它没有抛出错误,也没有出现,这可能是一个 JS 错误。

要诊断此问题,请在 Web Inspector 中打开 JavaScript 控制台(我相信在 Mac 上为 CMD+Shift+J),查看是否存在任何 JS 错误,无论是在加载文件(您的 Embedly 库等)还是在您的 JS 文件中他们自己。这可能与 Heroku 如何处理资产管道有关。如果是这种情况,请查看Rails Guide to the Asset Pipeline以获得一些重要/有趣的阅读。

  • 最不可能想到的情况是它不是对 HTML 进行清理或其他什么,在这种情况下,您只会在页面上看到一团 HTML。在这种情况下,我只需用谷歌搜索您正在使用的 HTML 清理方法和“生产”或其他内容,以查看人们还遇到了什么,或者编辑问题或开始一个新问题,错误描述更窄。

希望有帮助!

于 2014-09-29T14:41:15.993 回答