2011-12-23 32 views
2

背景:我正在用Padrino,Ruby 1.9.2, HAML和Heroku构建一个简单的博客。我希望帖子索引拥有类似杂志的外观 。对于索引中的每个帖子,用户都应该看到标题,内容 挑逗者和图片。我的问题是附加图像。与Padrino一起使用回形针

问题:我一直在尝试使用Paperclip gem将图像 附加到每个帖子。 Heroku将从亚马逊S3仓中捕捉实际图像。 到目前为止,当我尝试运行迁移时,我得到的错误:

​​

它看起来像回形针就不会加载,但有从哪里获得 卡住。

详情: - 问:当我“尝试运行迁移”时,我正在做什么? --a:我把下列的迁移文件夹

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耙AR:迁移”

--Q:我有回形针在Gemfile中列出? - 答:是的。

- 问:邮政模型是什么样的? --a:

class Post < ActiveRecord::Base 
    has_attached_file :picture, 
    :storage => :s3, 
    :bucket => 'blog_images', 
    :s3_credentials => { 
     :access_key_id => ENV['S3_KEY'], 
     :secret_access_key => ENV['S3_SECRET'] 
    } 
end 

--Q:什么是app.rb样子? --A:

class Blog < Padrino::Application 
    register Padrino::Rendering 
    register Padrino::Mailer 
    register Padrino::Helpers 

    enable :sessions 

    get '/' do 
    haml :index 
    end 
end 

- 问:boot.rb是什么样子的? --A:

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! 

- 问:完整的错误输出是什么样的? --a:

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 #<Class:0xa1ffb30> (NoMethodError) 
     from /home/jared/isthmus2/app/models/post.rb:2:in `<class:Post>' 
     from /home/jared/isthmus2/app/models/post.rb:1:in `<top (required)>' 
     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 `<top (required)>' 
     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 `<top (required)>' 
     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 `<top (required)>' 
     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 `<top (required)>' 
     from /usr/local/bin/padrino:19:in `load' 
     from /usr/local/bin/padrino:19:in `<main>' 

如果你已经读到这里...谢谢!我希望你能帮助我解决这个问题。

+0

没有迁移问题!我修正了迁移,应该读取“t.string”而不是“t.has_file_attached”:P但是,当我尝试运行应用程序时,仍然收到相同的错误 – haiqus 2011-12-23 05:16:38

+0

imagemagick已安装?你在使用rvm和/或bundler吗? – froderik 2011-12-23 07:41:38

+0

imagemagick安装最后我检查。我会仔细检查确认。我使用捆绑器,没有任何困难 – haiqus 2011-12-31 01:54:38

回答

2

回形针是rails不可知的,所以你需要把boot.rbPadrino.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

+0

谢谢!我在这个项目上休息了一下......我很快就会让你知道你的建议是如何运作的 – haiqus 2011-12-31 01:55:51

+0

好吧......我得到了“未初始化的常量Paperclip :: Schema(NameError)”以及建议的添加boot.rb – haiqus 2011-12-31 02:37:53

+0

是的,对不起,我使用了主分支,现在我已经更新了代码以使用2.4.5版本的回形针。 – DAddYE 2012-01-02 10:49:45