Embedly-Ruby gem在本地工作但不在生产中

时间:2014-09-28 22:01:53

标签: ruby-on-rails embedly

我已将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而不是生产的情况下在本地工作呢?

1 个答案:

答案 0 :(得分:1)

粗略地看一下你的代码之后,我无法确定它为什么不能在Production中工作,如果它在本地工作,但这里有一些调试思路。

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

一旦你更准确地了解出了什么问题,下面是调试的下一步:

  • 如果它出现错误,可能是因为 a),那么您没有在生产中包含必要且包含在本地的嵌入式环境变量(例如EMBEDLY_API_KEY),或者某些类似的工具设置问题或 b),您尚未迁移Heroku上的thumbnail_url列,或导致数据库问题的内容。
  

在任何一种情况下,您都可以通过在生产中生成错误然后从控制台运行heroku logs来获取最新生产服务器日志的视图,从而最好地诊断此问题。您也可以heroku logs --tail来获取正在运行的日志。这些可以帮助您查看任何错误,并且还可以看到,因为您的puts语句,什么是成功运行和未成功运行。

  • 如果它没有抛出错误,并且没有显示,则可能是JS错误。
  

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

  • 最不可能出现的情况是,它不是HTML清理或其他东西,在这种情况下,您只会在页面上看到一小撮HTML。在这种情况下,我只是谷歌你正在使用的HTML清理方法和“生产”或其他东西,看看人们遇到了什么,或编辑问题或开始一个新的问题,使用更窄的错误描述。< / LI>

希望有所帮助!