Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails生产环境中上载文件后,文件路径不会更新_Ruby On Rails_Ruby_File Upload_Passenger - Fatal编程技术网

Ruby on rails 在rails生产环境中上载文件后,文件路径不会更新

Ruby on rails 在rails生产环境中上载文件后,文件路径不会更新,ruby-on-rails,ruby,file-upload,passenger,Ruby On Rails,Ruby,File Upload,Passenger,我有一个rails应用程序,当用户创建一本书时,它会将名称与图书id相同的图像上传到assets/books\u icon upload_icon(params[:book][:image_upload]) # upload_image when create/update book def upload_icon(uploaded_io) photo_directory = "app/assets/images/" # only when user up

我有一个rails应用程序,当用户创建一本书时,它会将名称与图书id相同的图像上传到
assets/books\u icon

upload_icon(params[:book][:image_upload])

# upload_image when create/update book
    def upload_icon(uploaded_io)
       photo_directory = "app/assets/images/"

       # only when user upload the iphoto
       if uploaded_io.present?

         # upload to the exact location with category_id
         extension = File.extname(uploaded_io.original_filename)
         photo_location = 'books_image/'+ @book.id.to_s + extension

         # open in binary mode
         photo_full_location = photo_directory + photo_location
         File.open(photo_full_location, 'wb') do |file|
           file.write(uploaded_io.read)
         end

         # only have to state which is the directory, 
         # image_tag will use assets piepline which will add 'assets/images/' as prefix in src 
         @book.update_attribute(:image_url, photo_location)
       end
     end
它在开发模式下工作。然后,我在mac Apache2服务器上部署了rails应用程序,使用mysql作为数据库,并在开发配置文件中更改了
config.assets.compile=true

在生产模式下,我可以创建新书,并可以将图像上载到
资产/books\u图标
。但是,我刚刚上传的图像的文件路径将不会更新

例如,我创建了一本id为2的新书,在
assets/books\u图标中有2.jpg。但是rails应用程序会告诉我
http://localhost/assets/images/books_icon/2.jpg
已丢失

但是,当我重新启动apache服务器时,我可以在
http://localhost/assets/images/books_icon/2.jpg


有没有解决这种类型的
缓存问题的解决方案???

在这种情况下,上载的图像实际上并不被视为“资产”——将其视为碰巧存储在其他地方的数据。(图像资源可能是徽标或背景图像等)。Rails的资产管道做了一些非常棘手的事情,以便在实际资源(如图像)是资产时解析到它的简单文件路径

默认情况下,Rails将
app/public
文件夹设为文档根目录,因此您可以将图像上载到该文件夹中——可能位于名为“upload/img”的子目录中,在这种情况下,您可以使用路径
/upload/img/mybook.jpg
引用它

然而,这种方法往往很脆弱,因为映像实际上与数据库中的数据直接关联,但位于服务器的文件系统上。当您从开发转移到停滞或生产服务器时,它开始崩溃


我不推荐的一种方法是上传图像并将其作为blob类型存储在数据库中。我建议的另一个方法是使用另一个“中心”服务器,您可以将图像上载到该服务器,作为数据库的扩展。许多人使用AmazonAWS“S3”服务来实现这类功能。看一看,它在使所有这些变得非常简单、灵活方面做得非常出色,而且功能强大。

是否有特定要求使您决定将这些保存在应用程序/资产中而不是公共?没有要求:)这只是我的家庭作业设计:)谢谢您的回答:)我没有意识到
资产
文件夹的意义。我来看看宝石:)