使用Paperclip和Padrino
背景:我正在使用Padrino,Ruby 1.9.2,HAML和Heroku构建一个简单的博客。 我希望post索引具有杂志般的外观。 对于索引中的每个post,用户应该看到标题,内容摘要和图像。 我的问题是附加图像。
问题:我一直在尝试使用Paperclip gem将图像附加到每个post。 Heroku将从Amazon S3 bin中捕获实际图像。 到目前为止,当我尝试运行迁移时,我收到错误:
$ .../base.rb:1088:in `method_missing': undefined method `has_attached_file' for # (NoMethodError)
看起来像Paperclip只是不会加载,但是我被卡住了。
详细信息: – 问:当我“尝试运行迁移”时,我在做什么? – 答:我将以下内容放入迁移文件夹中
class AddPictureToPost < ActiveRecord::Migration def self.up change_table :posts do |t| t.has_attached_file :picture end end def self.down drop_attached_file :posts, :picture end end
然后运行“padrino rake ar:migrate”
– 问:我是否在Gemfile中列出了Paperclip? – A:是的。
– 问:post模型是什么样的? – 一个:
class Post :s3, :bucket => 'blog_images', :s3_credentials => { :access_key_id => ENV['S3_KEY'], :secret_access_key => ENV['S3_SECRET'] } end
– 问:app.rb是什么样子的? – 一个:
class Blog < Padrino::Application register Padrino::Rendering register Padrino::Mailer register Padrino::Helpers enable :sessions get '/' do haml :index end end
– 问:boot.rb是什么样的? – 一个:
PADRINO_ENV = ENV["PADRINO_ENV"] ||= ENV["RACK_ENV"] ||= "development" unless defined?(PADRINO_ENV) PADRINO_ROOT = File.expand_path('../..', __FILE__) unless defined? (PADRINO_ROOT) require 'rubygems' unless defined?(Gem) require 'bundler/setup' Bundler.require(:default, PADRINO_ENV) Padrino.before_load do end Padrino.after_load do end Padrino.load!
– 问:完整的错误输出是什么样的? – 一个:
jared:~/blog$ padrino rake ar:migrate => Executing Rake ar:migrate ... /usr/local/lib/ruby/gems/1.9.1/gems/activerecord-3.1.3/lib/ active_record/base.rb:1088:in `method_missing': undefined method `has_attached_file' for # (NoMethodError) from /home/jared/isthmus2/app/models/post.rb:2:in `' from /home/jared/isthmus2/app/models/post.rb:1:in `' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:240:in `require' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:240:in `block in require' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:223:in `block in load_dependency' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:640:in `new_constants_in' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:223:in `load_dependency' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:240:in `require' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/reloader.rb:148:in `safe_load' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:162:in `block in require_dependencies' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:160:in `each' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:160:in `require_dependencies' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/application.rb:34:in `inherited' from /home/jared/blog/app/app.rb:1:in `' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:240:in `require' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:240:in `block in require' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:223:in `block in load_dependency' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:640:in `new_constants_in' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:223:in `load_dependency' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:240:in `require' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/reloader.rb:148:in `safe_load' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:162:in `block in require_dependencies' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:160:in `each' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:160:in `require_dependencies' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/mounter.rb:148:in `locate_app_object' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/mounter.rb:30:in `initialize' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/mounter.rb:221:in `new' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/mounter.rb:221:in `mount' from /home/jared/blog/config/apps.rb:34:in `' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:240:in `require' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:240:in `block in require' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:223:in `block in load_dependency' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:640:in `new_constants_in' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:223:in `load_dependency' from /usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.1.3/lib/ active_support/dependencies.rb:240:in `require' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/reloader.rb:148:in `safe_load' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:162:in `block in require_dependencies' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:160:in `each' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:160:in `require_dependencies' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:70:in `block in load!' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:70:in `each' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/loader.rb:70:in `load!' from /home/jared/blog/config/boot.rb:29:in `' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/cli/base.rb:56:in `require' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/cli/base.rb:56:in `block in rake' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/cli/base.rb:140:in `capture' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/lib/ padrino-core/cli/base.rb:56:in `rake' from /usr/local/lib/ruby/gems/1.9.1/gems/thor-0.14.6/lib/thor/task.rb: 22:in `run' from /usr/local/lib/ruby/gems/1.9.1/gems/thor-0.14.6/lib/thor/ invocation.rb:118:in `invoke_task' from /usr/local/lib/ruby/gems/1.9.1/gems/thor-0.14.6/lib/thor.rb: 263:in `dispatch' from /usr/local/lib/ruby/gems/1.9.1/gems/thor-0.14.6/lib/thor/base.rb: 389:in `start' from /usr/local/lib/ruby/gems/1.9.1/gems/padrino-core-0.10.5/bin/ padrino:9:in `' from /usr/local/bin/padrino:19:in `load' from /usr/local/bin/padrino:19:in `'
如果你已经读过这么久了……谢谢! 我希望你能帮我解释一下。
Paperclip与rails
无关,因此您需要在boot.rb
中Padrino.before_load
:
ActiveRecord::Base.send(:include, Paperclip::Glue) File.send(:include, Paperclip::Upfile) Paperclip.options[:logger] = Padrino.logger
最后要在heroku
下运行迁移,你应该首先运行本地padrino rake gen
这将创建一个Rakefile
所以你应该能够简单地运行: heroku rake ar:migrate
- Paperclip,S3,Heroku:缺少图像
- 使用Ruby将大文件上传到S3失败,出现内存不足错误,如何在块中读取和上载?
- Ruby on Rails,Paperclip,亚马逊AWS S3和Heroku
- Paperclip – 从Amazon S3删除文件?
- 适用于S3文件副本的AWS SDK v2 AllAccessDisabled错误
- 从after_post_process或after_save获取id,bin或者bin
- Paperclip / S3的“缺少必需:桶选项”
- AWS S3 / Ruby on Rails / heroku:我的应用程序中的安全漏洞
- 如何解析位于Amazon S3存储桶中的CSV文件