8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Nginx 处于活动状态,但我看不到静态文件

user25653727 2月前

89 0

我有一个 django 项目。Settings.py:STATIC_URL = 'static/'STATIC_ROOT = 'static'MEDIA_URL = '/media/'MEDIA_ROOT = BASE_DIR / 'media'我已经执行了 collectstatic 并且一切正常。现在...

我有一个 django 项目。

设置.py:

STATIC_URL = 'static/'
STATIC_ROOT = 'static'

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

我已经完成了 collectstatic ,一切运行正常。现在我服务器上的静态文件夹包含所有文件。

Nginx的:enter image description here

我在使用 nginx 时遇到了问题,因为我改了一个名字, sites_available 然后开始出现错误,所以我重新安装了它,现在从日志来看一切都正常:

nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset:>
     Active: active (running) since Wed 2024-05-01 14:47:13 UTC; 11min ago
       Docs: man:nginx(8)
    Process: 6843 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
    Process: 6844 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
   Main PID: 6845 (nginx)
      Tasks: 2 (limit: 1026)
     Memory: 3.1M
        CPU: 60ms
     CGroup: /system.slice/nginx.service
             6845 "nginx: master process /usr/sbin/nginx -g daemon on; master>
             6846 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "">

May 01 14:47:13 23210 systemd[1]: nginx.service: Deactivated successfully.
May 01 14:47:13 23210 systemd[1]: Stopped A high performance web server and a r>
May 01 14:47:13 23210 systemd[1]: Starting A high performance web server and a >
May 01 14:47:13 23210 systemd[1]: Started A high performance web server and a r>
~
~
~
~
~
~
 ESCOC
 server and a reverse proxy server
/nginx.service; enabled; vendor preset: enabled)
2024-05-01 14:47:13 UTC; 11min ago

/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
inx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)





ss /usr/sbin/nginx -g daemon on; master_process on;"
ss" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >

service: Deactivated successfully.
d A high performance web server and a reverse proxy server.
ng A high performance web server and a reverse proxy server...
d A high performance web server and a reverse proxy server.
~
~
~
~
~
~
 ESCOD
 nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset:>
     Active: active (running) since Wed 2024-05-01 14:47:13 UTC; 11min ago
       Docs: man:nginx(8)
    Process: 6843 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_proce>
    Process: 6844 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (c>
   Main PID: 6845 (nginx)
      Tasks: 2 (limit: 1026)
     Memory: 3.1M
        CPU: 60ms
     CGroup: /system.slice/nginx.service
             6845 "nginx: master process /usr/sbin/nginx -g daemon on; master>
             6846 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "">

May 01 14:47:13 23210 systemd[1]: nginx.service: Deactivated successfully.
May 01 14:47:13 23210 systemd[1]: Stopped A high performance web server and a r>
May 01 14:47:13 23210 systemd[1]: Starting A high performance web server and a >
May 01 14:47:13 23210 systemd[1]: Started A high performance web server and a r>
~
~
~
~
~
~
lines 1-18/18 (END)
[2]+  Stopped                 systemctl status nginx
^Z

但我不知道为什么会出现错误。

Nginx 配置:

server {
    listen 80;
    server_name 77.777.77.77;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/ubuntu/portfolio-server;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}
帖子版权声明 1、本帖标题:Nginx 处于活动状态,但我看不到静态文件
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由user25653727在本站《ubuntu》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我有以下接口,它定义了一个对象,其中属性可以是两种不同的类型。导出接口 OptionsA { name: string;}导出接口 OptionsB { parts: number...

    我有以下接口,它定义一个对象,其中的属性可以是两种不同的类型。

    export interface OptionsA {
        name: string;
    }
    
    export interface OptionsB {
        parts: number;
    }
    
    export interface OptionsConfig {
        [key: string]: OptionsA | OptionsB;
    }
    

    这可以正常工作,但有一个限制,即类型的属性 OptionsB 必须以 "@" .

    例如;

    const example: OptionsConfig = {
        '@sample': {parts: 1},
        other: {name: 'example'}
    };
    

    因此,上述代码可以正常运行,但下面的示例是不正确的。

    const example: OptionsConfig = {
        '@sample': {parts: 1},
        other: {name: 'example'},
        '@wrong': {name: 'error'}
    };
    

    我想知道是否可以使用 TypeScript 声明 @wrong 只能实现 OptionsB 接口,因为它有 @ 前缀。

    或者,是否有另一种方法可以实现类似的限制。

  • 根据其他答案,我有一个 colors 用于 针迹 ,但对于组件中用作道具的每种颜色,我都执行以下操作。

    const colors = {
      white: '#ffffff',
      black: '#000000',
      transparent: 'transparent',
      text: '$black',
      background: '$white',
      indigo: '#0757D6',
      purple: '#7928ca',
      success: '#17c964',
      warning: '#f5a623',
      yellow2: '#F2C94C',
      error: '#f21361',
      primary: '#518AE3',
      secondary: '$purple',
      icon: '#BBBBBB',
      primaryOpacity: '#DEEBFF',
      secondaryOpacity: '#DBC8F0',
      errorOpacity: '#FFC3D8',
      subText: '#707070',
      gray1: '#333333',
      bgCard: '#F9F9FA',
      bgText: 'rgba(234, 234, 234, 0.7)',
    };
    

    要实现 ColorType 自动化,请尝试以下操作:

    type addPrefixToObject<TObject extends object, TPrefix extends string> = `${TPrefix}${keyof TObject}`
    
    export type ColorType = addPrefixToObject<typeof colors, '$'>;
    

    这将返回一个类型 "$black" | "$white" | "$text" (等等)。即它返回每个带有前缀的颜色键 $ .

  • 对于较新版本的 TS,这应该是可以接受的答案 - 或者应该更新可以接受的答案以包含这一点。

  • 使用类型强制前缀的一个快速答案(从 TS4.1 开始)-

    type strWithPre = `pre-${string}`
    
  • H 1 2月前 0 只看Ta
    引用 6

    @Superole 是的,你说得对——看来我误解了楼主。我会检查是否可以调整这一点。如果不行,我就在顶部添加免责声明。谢谢!

  • 哇!真有趣。我不想破坏乐趣,但 OP 希望 OptionsConfig 的属性名称带有前缀,以便实现 OptionB。不带前缀的名称应该实现 OptionA。因此,代码中的 ´attr2´ 和 ´attr3´ 应该会出错,因为类型为 '{\'@parts\': number; }' 的参数不能分配给类型为 '{ name: string; }' 的参数。而 ´myConfig[\'@sample\'] = {parts: 42}´ 不应该出错。

  • Akom 2月前 0 只看Ta
    引用 8

    TL;DR: 复制第一个代码块

    虽然在提出这个问题时这也许是不可能的,但我在寻找可以简单复制粘贴的解决方案时遇到了这个问题。 TypeScript 4.1 为我们提供了模板文字 ,使此实现成为可能。

    TypeScript 游乐场的完整示例在 这里 .


    首先,我们需要定义一些实用类型来自动为对象类型添加前缀。这可以通过以下代码块完成。如果你还不熟悉它们,我建议你先阅读 模板文字 and conditional 类型,它们在下面的代码中都大量使用

    type addPrefix<TKey, TPrefix extends string> = TKey extends string
      ? `${TPrefix}${TKey}`
      : never;
    
    type removePrefix<TPrefixedKey, TPrefix extends string> = TPrefixedKey extends addPrefix<infer TKey, TPrefix>
      ? TKey
      : '';
    
    type prefixedValue<TObject extends object, TPrefixedKey extends string, TPrefix extends string> = TObject extends {[K in removePrefix<TPrefixedKey, TPrefix>]: infer TValue}
      ? TValue
      : never;
    
    type addPrefixToObject<TObject extends object, TPrefix extends string> = {
      [K in addPrefix<keyof TObject, TPrefix>]: prefixedValue<TObject, K, TPrefix>
    } 
    
    • addPrefix 接受现有的 TKey TPrefix 添加 TKey 扩展了类型字符串。如果它不扩展类型, string , never 则返回类型。
    • removePrefix 接收 a TPrefixedKey 和 a TPrefix 从密钥中 TPrefix 删除, infer 以检索用于创建 TPrefixedKey .
    • prefixedValue 接受一个 TObject 没有。然后,它会 TValue TPrefixedKey 使用 删除前缀后 removePrefix 。如果成功,则 TValue 返回 。否则,将返回一个空字符串,这仍然是一个有效的对象签名。
    • addPrefixToObject 将以上所有内容放在一起。它映射当前内部的所有键 TObject 并为其添加前缀。使用以下方法检索值 prefixedValue .

    如果你把它付诸行动,它似乎会发挥很好的作用:

    const myConfig: OptionsConfig = {};
    
    // Works:
    myConfig.attr1 = {name: 'name'};
    myConfig.attr2 = {"@parts": 1};
    myConfig.attr3 = {"@parts": 1, name: 'name'};
    
    // Error: Type '{ parts: number; }' is not assignable to type 'OptionsA | addPrefixToObject<OptionsB, "@">'.
    myConfig.attr4 = {"parts": 1};
    
    // Prints as:
    // type prefixedOptionB = {
    //    "@parts": number;
    // }
    type PrefixedOptionB = addPrefixToObject<OptionsB, '@'>;
    

    自动完成功能也正常运行:


    所有这些可能都可以进一步优化,因此如果您有任何建议,请发表评论。

    TypeScript 游乐场的完整示例在 这里 .

  • K in keyof T 遍历 T 中的每个键并将其分配给类型 K。as 子句允许您映射每个 K 键。您可能希望 [K in keyof T as ${P}${K}]: T[K] 能够正常工作,但是这会抱怨说 K 可以是符号,而您不能将符号与字符串连接起来。因此,我们首先检查它是否是字符串,然后映射它。

  • 我很难理解 K in keyof T as K ... 我该怎么读这个?这正是我要找的,但这是我第一次看到这种语法,我很沮丧,它能用,但我不明白 :)

  • Typescript 4.1 为我们提供了 键重新映射功能 ,因此你可以执行以下操作:

    type addPrefixToObject<T, P extends string> = {
      [K in keyof T as K extends string ? `${P}${K}` : never]: T[K]
    }
    

    然后你的 OptionsConfig 变成

    export interface OptionsConfig {
        [key: string]: OptionsA | addPrefixToObject<OptionsB, '@'>;
    }
    

    Typescript 游乐场 中提供的示例 .

  • Django 没有用于提供静态文件的内置解决方案,至少在 DEBUG 必须为 False 时在生产中没有。

    我们必须使用第三方解决方案来实现这一点。

    安装 WhiteNoise

    pip install whitenoise
    

    修改Settings.py

    MIDDLEWARE = [
        'django...............Middleware',
        'django...............Middleware',
        'whitenoise.middleware.WhiteNoiseMiddleware',
        'django...............Middleware',
        'django...............Middleware',
    ]
    

    然后收集静态文件

    python manage.py collectstatic
    
返回
作者最近主题: