上传的图像似乎保存,然后消失

时间:2015-04-21 18:45:34

标签: ruby-on-rails image ruby-on-rails-4 paperclip

我正在使用Rails 4来构建博客。每篇博文都有图片,标题和文字。我可以上传一张图片,当我查看帖子/:id页面时看到图片就在那里,但后来当我回到同一页面时,图片就消失了。我正在使用Paperclip gem for rails 4。

我的图像是否以某种方式与某个会话相关联?是不是真的保存到数据库?以下是已部署项目的链接,其中包含未显示的图像:https://vinna.herokuapp.com/posts/1

我还在学习,所以非常感谢任何信息!

这是我的控制器:

class PostsController < ApplicationController
def index
    @posts = Post.all
end

def new
    @post = Post.new
end

def create
    @post = Post.new(post_params)

    if @post.save
        redirect_to @post
    else
        render 'new'
    end
end

def show
    @post = Post.find(params[:id])
end

def edit
    @post = Post.find(params[:id])
end

def update
    @post = Post.find(params[:id])

    if @post.update(post_params)
        redirect_to @post
    else
        render 'edit'
    end
end

def destroy
    @post = Post.find(params[:id])
    @post.destroy

    redirect_to posts_path
end

private
    def post_params
        params.require(:post).permit(:image, :title, :text)
    end
end

我的模特:

class Post < ActiveRecord::Base
has_many :comments
has_attached_file :image, styles: { small: "100x100", med: "200x200", large: "600x600"}

validates :title, presence: true,
                                    length: { minimum: 2 }

validates :text, presence: true,
                                    length: { minimum: 2 }

validates_attachment_presence :image
validates_attachment_size :image, :less_than => 5.megabytes
validates_attachment_content_type :image, :content_type => ['image/jpeg', 'image/png']
end

我的迁移:

class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
  t.string :title
  t.text :text

  t.timestamps null: false
end
end
end

添加回形针:

class AddPaperclipToPost < ActiveRecord::Migration
def change
add_attachment :posts, :image
end
end

我的帖子/:id

的部分观点
    <p class="blog-photo_large"><%= link_to image_tag(@post.image.url(:large)), @post.image.url %></p>

1 个答案:

答案 0 :(得分:3)

这应该可以在单机上正常工作。但是使用heroku你的应用程序应该是一个12因素的应用程序。在这种情况下,您不应该使用Filesystem,而是使用其他服务来存储文件。这是因为heroku上的应用程序代码分布在多个物理硬件实例上,您永远不知道哪个实际节点将响应https://vinna.herokuapp.com/posts/1。因此,您首先在某个特定节点上看到图像,然后将其平衡到其他未存储的节点。

The Twelve-Factor-App的第IV点。