使用Paperclip和Rails的未定义方法`has_attached_file`

时间:2013-07-25 15:38:11

标签: ruby-on-rails imagemagick paperclip

我在使用Paperclip处理我的VPS时遇到了一些麻烦。它在本地和我的第一个VPS上运行良好,但是当我在第二个VPS上尝试rake db:migrate时,我得到以下输出:

root@Test:/home/rails# rake db:migrate
==  CreateGroups: migrating ===================================================
-- create_table(:groups)
   -> 0.0019s
-- add_column(:discussions, :group_id, :integer)
   -> 0.0007s
-- add_column(:memberships, :memberships_id, :integer)
   -> 0.0006s
-- has_attached_file(:photo, {:styles=>{:original=>"400x200>", :tile=>"200x200#"}, :url=>"/assets/images/groups/:id/:style/:basename.:extension", :path=>":rails_root/public/assets/images/groups/:id/:style/:basename.:extension", :default_url=>"/assets/:style/missing-group-image.jpg"})
rake aborted!
An error has occurred, this and all later migrations canceled:

undefined method `has_attached_file' for #<CreateGroups:0x0000000342cbf8>/usr/local/rvm/gems/ruby-1.9.3-p429/gems/activerecord-3.2.8/lib/active_record/migration.rb:465:in `block in method_missing'
...

到目前为止我设置的第二个VPS是:

  • 设置Unicorn + Nginx(它们似乎工作正常)
  • apt-get install git
  • apt-get install imagemagick
  • bundle install(和Paperclip在我的Gemfile中)
  • 重启我的shell
  • 重新启动了VPS

完成所有这些后,每当我尝试迁移时,我仍然会收到上述错误。关于下一步做什么的任何想法?

2 个答案:

答案 0 :(得分:1)

我认为你并没有完全遵循Paperclip安装指南。您应该进行以下迁移(从Paperclip自述文件复制,因此可能略有不同)

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

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

你显然在那里放了一些应该在你身上的东西。

答案 1 :(得分:0)

事实证明,我的问题与不完整的代码有关,而不是我的环境。事实证明,我的队友已将一些不完整的代码推送到我们的GitHub存储库,我没有注意到它。

通过执行git logs,选择正确的提交,然后选择git checkout (...),我能够按预期迁移和播种数据库并运行我的应用程序。

我花了一个多小时试图解决这个问题感到非常愚蠢,但希望它可以帮助其他人。 :)