首页 > 解决方案 > Rails 作为守护进程启动时找不到目录

问题描述

我遇到了一个我还无法解决的特定问题。

以下是一些一般信息:

在 app/assets/images/avatars 中有一个包含 avatar-images 的文件夹。每次创建帐户时,注册控制器(创建方法的自定义覆盖 - 见下文)应该从该文件夹中选择一个随机图像。

class MyregistrationsController < Devise::RegistrationsController
    def create
        images = Dir.glob("app/assets/images/avatars/*.png")
        
        if images.size > 2
            begin
                the_avatar = images[rand(images.size)].split("/").last.split(".").first
            rescue => err
                the_avatar = ""
            end
        else
            redirect_to root_path(anchor: "account"), alert: "cannot find avatar images"
            return
        end

        # ...
    end
end

这始终有效(所有环境),除了我将应用程序作为守护程序启动(rails server -d)。然后 Dir.pwd 只导致“/”并且找不到任何文件夹(images.size == 0)。当我不将它作为守护进程启动时,它会正确生成“/rails-app/home”(这是项目目录)并找到所有图像。

但是,应用程序的其余部分工作正常。

(在容器内)这不会产生任何问题 RAILS_ENV=production rails server -b 0.0.0.0 -p 3000

但这确实: RAILS_ENV=production rails server -b 0.0.0.0 -p 3000 -d

我该如何进一步分析?请告诉我是否缺少任何信息。我会尽快添加。

标签: ruby-on-railsdocker

解决方案


推荐阅读