小编jbh*_*ren的帖子

Rails 5.2.1 ActiveStorage 使用 nginx/puma 下载的文件被截断

我的第一个ActiveStorage项目在开发(仅 puma)上运行良好,但在生产(nginx/puma)上,我在下载显示为截断文件的大文件时遇到问题。

例如,上传的文件大小为 24.1 MB,下载后文件大小为 5 MB(截断)。

我主要上传 pdf 文件,上传的文件是完整的(在服务器上检查)并且预览工作正常。

所有环境都使用config.active_storage.service = :local

配置/存储.yml

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>
Run Code Online (Sandbox Code Playgroud)

下载网址是使用生成的rails_blob_path(document.doc, disposition: :inline)

我怀疑 puma 或 nginx 中的某个选项或参数导致下载完整文件失败。截至目前,我在日志中看不到任何错误。

/etc/nginx/sites-available/default.conf

upstream app {
    # Path to Puma SOCK file, as defined previously
    server unix:/home/deploy/rails/shared/sockets/puma.sock fail_timeout=0;
}

server {
        listen 80;

        root /home/deploy/rails/public;

        try_files $uri/index.html $uri @app;

        # Make site accessible from http://localhost/
        server_name localhost;

        location @app {
            proxy_pass http://app;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host; …
Run Code Online (Sandbox Code Playgroud)

nginx ruby-on-rails-5 rails-activestorage

5
推荐指数
1
解决办法
2021
查看次数

无法从shell脚本调用Openscad -D命令行

我在Ubuntu linux上使用openscad命令从命令行生成模型.我最终成功运行了openscad命令,使用-D参数覆盖变量值:

$ openscad -o output.stl -D 'param1="name1"' -D 'param2="name2"' openscad-script.scad
Run Code Online (Sandbox Code Playgroud)

编辑:注意我们必须传递-D参数的方式,单引号和双引号必须根据因为Openscad文档.

但是当我从shell脚本生成并执行相同的命令时,openscad失败并出现错误:

$ ./myscript.sh value1 value2 
Run Code Online (Sandbox Code Playgroud)

错误:第XX行中的分析器错误:语法错误无法解析文件'openscad-script.scad'!

其中XX =文件的最后一行.

这是bash脚本

#!/bin/bash
# run openscad command
param1="-D 'param1=\"$1\"'"
param2="-D 'param2=\"$2\"'"
echo "openscad -o $1-$2.stl $param1 $param2 openscad-script.scad"
openscad -o $1-$2.stl $param1 $param2 openscad-script.scad
Run Code Online (Sandbox Code Playgroud)

这看起来很简单,我仍然无法弄清楚opencad在运行命令时失败的原因.

谢谢你的帮助,

编辑:我发现了一种让它工作的方法,可能不是最好的

#!/bin/bash
# run openscad command
param1="-D 'param1=\"$1\"'"
param2="-D 'param2=\"$2\"'"
command = "openscad -o $1-$2.stl $param1 $param2 openscad-script.scad"
eval $command
Run Code Online (Sandbox Code Playgroud)

bash command-line openscad

4
推荐指数
1
解决办法
396
查看次数