我将 Paperclip gem安装到我的rails应用中,这样我就可以让用户上传图片了。一切似乎在当地都很好。然后我通过git push heroku master
命令行提示符推送到Heroku,然后继续在线与我的应用程序进行交互。当我尝试上传图片然后单击“提交”按钮时,会显示一条错误消息。
以下是日志(已更新)
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
感谢您以后的任何帮助。
答案 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