上传图像回形针时获取错误heroku

时间:2014-06-29 07:19:14

标签: ruby-on-rails heroku

我将 Paperclip gem安装到我的rails应用中,这样我就可以让用户上传图片了。一切似乎在当地都很好。然后我通过git push heroku master命令行提示符推送到Heroku,然后继续在线与我的应用程序进行交互。当我尝试上传图片然后单击“提交”按钮时,会显示一条错误消息。

enter image description here

以下是日志(已更新)

       2014-07-01T06:50:55.157229+00:00 app[web.1]:   Rendered layouts/_header.html.erb (0.7ms)
2014-07-01T06:50:56.211672+00:00 heroku[router]: at=info method=GET path="/about" host=omr-photoshare.herokuapp.com request_id=0b8e9a43-5ffd-4bae-aa4f-61e9f87dfdfc fwd="65.78.4.236" dyno=web.1 connect=2ms service=192ms status=304 bytes=845
2014-07-01T06:50:56.025883+00:00 app[web.1]: Started GET "/about" for 65.78.4.236 at 2014-07-01 06:50:56 +0000
2014-07-01T06:50:56.082614+00:00 app[web.1]:   Rendered pages/about.html.erb within layouts/application (0.2ms)
2014-07-01T06:50:56.174581+00:00 app[web.1]: Completed 200 OK in 95ms (Views: 7.0ms | ActiveRecord: 86.8ms)
2014-07-01T06:50:56.079586+00:00 app[web.1]: Processing by PagesController#about as HTML
2014-07-01T06:50:56.173874+00:00 app[web.1]:   Rendered layouts/_header.html.erb (90.3ms)
2014-07-01T06:50:57.026362+00:00 heroku[router]: at=info method=GET path="/users/edit" host=omr-photoshare.herokuapp.com request_id=9e7dbd9b-1e90-4cf0-b422-a39fc4dd86af fwd="65.78.4.236" dyno=web.1 connect=4ms service=26ms status=200 bytes=4509
2014-07-01T06:50:57.023820+00:00 app[web.1]:   Rendered devise/registrations/edit.html.erb within layouts/application (6.5ms)
2014-07-01T06:50:57.007189+00:00 app[web.1]: Started GET "/users/edit" for 65.78.4.236 at 2014-07-01 06:50:57 +0000
2014-07-01T06:50:57.027133+00:00 app[web.1]: Completed 200 OK in 16ms (Views: 12.8ms | ActiveRecord: 1.3ms)
2014-07-01T06:50:57.010704+00:00 app[web.1]: Processing by Devise::RegistrationsController#edit as HTML
2014-07-01T06:50:57.026562+00:00 app[web.1]:   Rendered layouts/_header.html.erb (0.5ms)
2014-07-01T06:50:58.037348+00:00 heroku[router]: at=info method=POST path="/users/sign_out" host=omr-photoshare.herokuapp.com request_id=62ed2279-f63e-4c4f-9721-7b1361348276 fwd="65.78.4.236" dyno=web.1 connect=32ms service=41ms status=302 bytes=931
2014-07-01T06:50:58.138958+00:00 heroku[router]: at=info method=GET path="/" host=omr-photoshare.herokuapp.com request_id=d36b09ab-feb9-4e13-8b07-97bda734f4cd fwd="65.78.4.236" dyno=web.1 connect=1ms service=72ms status=200 bytes=2809
2014-07-01T06:50:58.004542+00:00 app[web.1]: Started DELETE "/users/sign_out" for 65.78.4.236 at 2014-07-01 06:50:58 +0000
2014-07-01T06:50:58.034982+00:00 app[web.1]: Completed 302 Found in 25ms (ActiveRecord: 12.2ms)
2014-07-01T06:50:58.119933+00:00 app[web.1]: Processing by PagesController#home as HTML
2014-07-01T06:50:58.137550+00:00 app[web.1]:   Rendered layouts/_header.html.erb (0.5ms)
2014-07-01T06:50:58.009338+00:00 app[web.1]: Processing by Devise::SessionsController#destroy as HTML
2014-07-01T06:50:58.116047+00:00 app[web.1]: Started GET "/" for 65.78.4.236 at 2014-07-01 06:50:58 +0000
2014-07-01T06:50:58.009357+00:00 app[web.1]:   Parameters: {"authenticity_token"=>"5AnEyKY75EbCUcrc50OZjx2MOguNlKFceSaDg5DoFzw="}
2014-07-01T06:50:58.136033+00:00 app[web.1]:   Rendered pages/home.html.erb within layouts/application (14.2ms)
2014-07-01T06:50:58.034741+00:00 app[web.1]: Redirected to http://omr-photoshare.herokuapp.com/
2014-07-01T06:50:58.138057+00:00 app[web.1]: Completed 200 OK in 18ms (Views: 16.7ms | ActiveRecord: 0.0ms)
2014-07-01T06:51:00.169842+00:00 heroku[router]: at=info method=GET path="/users/sign_in" host=omr-photoshare.herokuapp.com request_id=102f1369-f2c7-4c60-95fd-fdcf94c91f3b fwd="65.78.4.236" dyno=web.1 connect=1ms service=95ms status=200 bytes=3735
2014-07-01T06:51:00.148527+00:00 app[web.1]: Started GET "/users/sign_in" for 65.78.4.236 at 2014-07-01 06:51:00 +0000
2014-07-01T06:51:00.163967+00:00 app[web.1]:   Rendered devise/shared/_links.erb (1.7ms)
2014-07-01T06:51:00.164009+00:00 app[web.1]:   Rendered devise/sessions/new.html.erb within layouts/application (6.6ms)
2014-07-01T06:51:00.165306+00:00 app[web.1]:   Rendered layouts/_header.html.erb (0.7ms)
2014-07-01T06:51:00.152352+00:00 app[web.1]: Processing by Devise::SessionsController#new as HTML
2014-07-01T06:51:00.165745+00:00 app[web.1]: Completed 200 OK in 13ms (Views: 10.2ms | ActiveRecord: 0.0ms)
2014-07-01T06:51:01.519186+00:00 heroku[router]: at=info method=POST path="/users/sign_in" host=omr-photoshare.herokuapp.com request_id=2e71a5f1-e10a-4158-af5c-6f80f8aac4a3 fwd="65.78.4.236" dyno=web.1 connect=9ms service=144ms status=302 bytes=1041
2014-07-01T06:51:01.575579+00:00 heroku[router]: at=info method=GET path="/" host=omr-photoshare.herokuapp.com request_id=304d9c4f-d607-4f37-aa75-bf07c48ace45 fwd="65.78.4.236" dyno=web.1 connect=3ms service=25ms status=200 bytes=2911
2014-07-01T06:51:01.571496+00:00 app[web.1]: Processing by PagesController#home as HTML
2014-07-01T06:51:01.518046+00:00 app[web.1]: Completed 302 Found in 133ms (ActiveRecord: 12.5ms)
2014-07-01T06:51:01.381342+00:00 app[web.1]: Started POST "/users/sign_in" for 65.78.4.236 at 2014-07-01 06:51:01 +0000
2014-07-01T06:51:01.576450+00:00 app[web.1]:   Rendered layouts/_header.html.erb (0.5ms)
2014-07-01T06:51:01.384466+00:00 app[web.1]: Processing by Devise::SessionsController#create as HTML
2014-07-01T06:51:01.384511+00:00 app[web.1]:   Parameters: {"utf8"=>"✓", "authenticity_token"=>"+8dZCduvFyzofV4G28jmxjsOXYrweHJ+cdJe3lEWPTQ=", "user"=>{"email"=>"cghazanfar10@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
2014-07-01T06:51:01.517874+00:00 app[web.1]: Redirected to http://omr-photoshare.herokuapp.com/
2014-07-01T06:51:01.568980+00:00 app[web.1]: Started GET "/" for 65.78.4.236 at 2014-07-01 06:51:01 +0000
2014-07-01T06:51:01.575119+00:00 app[web.1]:   Rendered pages/home.html.erb within layouts/application (2.4ms)
2014-07-01T06:51:01.576943+00:00 app[web.1]: Completed 200 OK in 5ms (Views: 3.1ms | ActiveRecord: 1.4ms)
2014-07-01T07:53:44.045215+00:00 heroku[web.1]: State changed from up to down
2014-07-01T07:53:44.044809+00:00 heroku[web.1]: Idling
2014-07-01T07:53:47.433692+00:00 app[web.1]: [2014-07-01 07:53:47] FATAL SignalException: SIGTERM
2014-07-01T07:53:47.433697+00:00 app[web.1]:    /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:170:in `select'
2014-07-01T07:53:47.433700+00:00 app[web.1]:    /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:170:in `block in start'
2014-07-01T07:53:47.433702+00:00 app[web.1]:    /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:32:in `start'
2014-07-01T07:53:47.433704+00:00 app[web.1]:    /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:160:in `start'
2014-07-01T07:53:47.433753+00:00 app[web.1]:    /app/vendor/bundle
/ruby/2.0.0/gems/rack-1.5.2/lib/rack/handler/webrick.rb:14:in `run'
2014-07-01T07:53:47.433755+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/server.rb:264:in `start'
2014-07-01T07:53:47.433757+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/server.rb:69:in `start'
2014-07-01T07:53:47.433758+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:81:in `block in server'
2014-07-01T07:53:47.433760+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:76:in `tap'
2014-07-01T07:53:47.433761+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:76:in `server'
2014-07-01T07:53:47.433763+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
2014-07-01T07:53:47.433764+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands.rb:17:in `<top (required)>'
2014-07-01T07:53:47.433766+00:00 app[web.1]:    bin/rails:8:in `require'
2014-07-01T07:53:47.433767+00:00 app[web.1]:    bin/rails:8:in `<main>'
2014-07-01T07:53:47.433773+00:00 app[web.1]: [2014-07-01 07:53:47] INFO  going to shutdown ...
2014-07-01T07:53:47.433817+00:00 app[web.1]: [2014-07-01 07:53:47] INFO  WEBrick::HTTPServer#start done.
2014-07-01T07:53:47.433890+00:00 app[web.1]: Exiting
2014-07-01T07:53:49.611381+00:00 heroku[web.1]: Process exited with status 143
2014-07-01T07:53:46.855962+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2014-07-01T15:33:01.545336+00:00 heroku[web.1]: Unidling
2014-07-01T15:33:01.545628+00:00 heroku[web.1]: State changed from down to starting
2014-07-01T15:33:08.727524+00:00 app[web.1]: [2014-07-01 15:33:08] INFO  WEBrick 1.3.1
2014-07-01T15:33:08.727547+00:00 app[web.1]: [2014-07-01 15:33:08] INFO  ruby 2.0.0 (2014-05-08) [x86_64-linux]
2014-07-01T15:33:08.727961+00:00 app[web.1]: [2014-07-01 15:33:08] INFO  WEBrick::HTTPServer#start: pid=2 port=36532
2014-07-01T15:33:04.638475+00:00 heroku[web.1]: Starting process with command `bin/rails server -p 36532 -e production`
2014-07-01T15:33:09.317544+00:00 heroku[web.1]: State changed from starting to up
2014-07-01T15:33:10.624767+00:00 heroku[router]: at=info method=GET path="/favicon.ico" host=omr-photoshare.herokuapp.com request_id=10c1d02a-1e17-4a48-9838-c35c2d530b52 fwd="66.249.83.39" dyno=web.1 connect=4ms service=8ms status=200 bytes=228
2014-07-01T16:38:20.572132+00:00 heroku[web.1]: State changed from up to down
2014-07-01T16:38:20.571809+00:00 heroku[web.1]: Idling
2014-07-01T16:38:25.614240+00:00 app[web.1]: [2014-07-01 16:38:25] FATAL SignalException: SIGTERM
2014-07-01T16:38:25.614249+00:00 app[web.1]:    /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:170:in `select'
2014-07-01T16:38:25.614252+00:00 app[web.1]:    /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:170:in `block in start'
2014-07-01T16:38:25.614254+00:00 app[web.1]:    /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:32:in `start'
2014-07-01T16:38:25.614255+00:00 app[web.1]:    /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:160:in `start'
2014-07-01T16:38:25.614257+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/handler/webrick.rb:14:in `run'
2014-07-01T16:38:25.614260+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/server.rb:69:in `start'
2014-07-01T16:38:25.614258+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/server.rb:264:in `start'
2014-07-01T16:38:25.614262+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:81:in `block in server'
2014-07-01T16:38:25.614268+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands.rb:17:in `<top (required)>'
2014-07-01T16:38:25.614263+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:76:in `tap'
2014-07-01T16:38:25.614342+00:00 app[web.1]: [2014-07-01 16:38:25] INFO  going to shutdown ...
2014-07-01T16:38:25.614455+00:00 app[web.1]: => Ctrl-C to shutdown server
2014-07-01T16:38:25.614272+00:00 app[web.1]:    bin/rails:8:in `<main>'
2014-07-01T16:38:25.614452+00:00 app[web.1]: => Run `rails server -h` for more startup options
2014-07-01T16:38:25.614265+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:76:in `server'
2014-07-01T16:38:25.614266+00:00 app[web.1]:    /app/vendor/bundle/ruby/2.0.0/gems/railties-4.1.1/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
2014-07-01T16:38:25.614270+00:00 app[web.1]:    bin/rails:8:in `require'
2014-07-01T16:38:25.614406+00:00 app[web.1]: [2014-07-01 16:38:25] INFO  WEBrick::HTTPServer#start done.
2014-07-01T16:38:25.614450+00:00 app[web.1]: => Rails 4.1.1 application starting in production on http://0.0.0.0:36532
2014-07-01T16:38:25.614475+00:00 app[web.1]: Exiting
2014-07-01T16:38:25.614448+00:00 app[web.1]: => Booting WEBrick
2014-07-01T16:38:25.614453+00:00 app[web.1]: => Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
2014-07-01T16:38:24.918023+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2014-07-01T16:38:28.512103+00:00 heroku[web.1]: Process exited with status 143

pins_controller.rb

class PinsController < ApplicationController
  before_action :set_pin, only: [:show, :edit, :update, :destroy]
  before_action :correct_user, only: [:edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index, :show]
  def index
    @pins = Pin.all
  end

  def show
  end

  def new
    @pin = current_user.pins.build
  end

  def edit
  end

  def create
    @pin = current_user.pins.build(pin_params)

      if @pin.save
      redirect_to @pin, notice: 'Pin was successfully created.'


    else

      render action: 'new'
    end
  end

  def update
    if @pin.update(pin_params)
      redirect_to @pin, notice: 'Pin was successfully updated.'
    else
      render action: 'edit'
    end
  end

  def destroy
    @pin.destroy
    redirect_to pins_url
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_pin
      @pin = Pin.find(params[:id])
    end

    def correct_user
      @pin = current_user.pins.find_by(id: params[:id] )
      redirect_to pins_path, notice: "Not authorized to edit this Pin" if @pin.nil?
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def pin_params
      params.require(:pin).permit(:description, :image, :file_avatar)
    end
end

模型/ pin.rb

class Pin < ActiveRecord::Base
    belongs_to :user
    has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }
    validates_attachment :image, content_type: { content_type: ["image/jpg", "image/jpeg", "image/png", "image/gif"] }
end

db / migrate add_attached_image_to_pins.rb

class AddAttachmentImageToPins < ActiveRecord::Migration
  def self.up
    change_table :pins do |t|
      t.attachment :image

    end
  end

  def self.down
    drop_attached_file :pins, :image


  end
end

最后是 Gemfile

source 'https://rubygems.org'
gem 'rails', '4.1.1'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'bootstrap-sass'
gem 'devise', '~> 3.2.4'
gem 'paperclip', github: 'thoughtbot/paperclip'
gem 'aws-sdk', '~> 1.45.0'


group :development, :test do
     gem 'sqlite3'
end

group :production do
     gem 'pg'
     gem 'rails_12factor'
end

gem 'sdoc', '~> 0.4.0',          group: :doc
gem 'spring',        group: :development

production.rb

Rails.application.configure do

  config.cache_classes = true

  config.eager_load = true

  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  config.serve_static_assets = false

  # Compress JavaScripts and CSS.
  config.assets.js_compressor = :uglifier
  # config.assets.css_compressor = :sass

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = false

  # Generate digests for assets URLs.
  config.assets.digest = true

  # Version of your assets, change this if you want to expire all your assets.
  config.assets.version = '1.0'


  # Set to :debug to see everything in the log.
  config.log_level = :info


  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners.
  config.active_support.deprecation = :notify


  # Use default logging formatter so that PID and timestamp are not suppressed.
  config.log_formatter = ::Logger::Formatter.new

  # Do not dump schema after migrations.
  config.active_record.dump_schema_after_migration = false

  #required for Heroku
  #Note to set this to your actual host
  config.action_mailer.default_url_options = { host: 'http://omr-photoshare.herokuapp.com/' }
# sets paperclip to upload image to aws
  config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
      :bucket => ENV['S3_BUCKET_NAME'],
      :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
      :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    }
  }

end

到目前为止,一切似乎都有效,直到我开始通过 Heroku 在线与我的应用进行互动。

这是我的 GitHub 回购:https://github.com/cyzanfar/Photoshare

感谢您以后的任何帮助。

2 个答案:

答案 0 :(得分:1)

实际错误在这里:

Paperclip::Error (Pin model missing required attr_accessor for 'image_file_name')

您需要将类似Paperclip的相关列添加到Pin模型中:

rails generate paperclip Pin image

heroku run rake db:migrate

或创建迁移文件,例如:

class AddAvatarColumnsToUsers < ActiveRecord::Migration
  def self.up
    add_attachment :users, :avatar
  end

  def self.down
    remove_attachment :users, :avatar
  end
end

You Pin模型还应指定:

Class Pin < ActiveRecord::Base
  has_attached_file :image

答案 1 :(得分:1)

<强> DB

这是您的错误:

Paperclip::Error (Pin model missing required attr_accessor for 'image_file_name'):

这通常是因为您未在has_attached_file模型中加入paperclip帮助,或者您尚未执行Paperclip migration

如果它在开发中有效,则可能意味着您没有在Heroku上设置db - 可以使用以下方法修复:

$ heroku run rake db:migrate