我有一个 Rails 3.1 应用程序,用户可以在其中上传图片。我将它们存储在 /assets/images 中,因为这是 image_tag 查找的路径,而不是 public/images。
在开发中一切正常,但我部署到 Heroku,它给了我这个错误:
ActionView::Template::Error(image_name.jpeg 未预编译)
处理这种情况的正确方法是什么?上传后有没有办法编译图像,还是应该将它们存储在其他地方?
我有一个 Rails 3.1 应用程序,用户可以在其中上传图片。我将它们存储在 /assets/images 中,因为这是 image_tag 查找的路径,而不是 public/images。
在开发中一切正常,但我部署到 Heroku,它给了我这个错误:
ActionView::Template::Error(image_name.jpeg 未预编译)
处理这种情况的正确方法是什么?上传后有没有办法编译图像,还是应该将它们存储在其他地方?
您不能使用 Heroku 上的文件系统来存储上传。
您不应该使用image_path
上传的图像,因为它假设它正在查看文件系统。如果使用image_tag
,则必须传递完整的 URL,而不仅仅是图像名称。
您是否使用carrierwave 上传图片?您可以使用载波相当容易地将它们存储在亚马逊 S3 上。Carrierwave 说明其他解决方案也具有易于访问的 S3 存储。
Heroku 不会让您将文件存储在文件系统中。跑
RAILS_ENV=production bundle exec rake assets:precompile
在本地编译你的资产,添加到 git,然后推送到 heroku,但是你以后不能通过你在 heroku 上的应用程序添加图像。如果您将它们上传到/temp
文件夹,它们将在那里停留片刻,或者直到您重新部署/更新您的代码,我相信。