jjzjj

docker - 通过 'revel build <testapp>' 的 run.sh 二进制文件未在 docker 容器内运行

coder 2024-07-07 原文

因为我最近开始使用 revel 框架来构建 go web 应用程序。我创建了一个测试应用程序 (orpat),将其编译为“revel build orpat prod”并更改了 conf PORT->8084 以发布该应用程序。生成的文件是 -

  1. orpat(可执行文件 11 MB)
  2. 运行.sh
  3. 运行.bat
  4. 源/文件夹

它从其他位置在我的本地系统上执行良好(当然它安装了 golang 和 revel)。 http://localhost:8084

我将构建文件复制到未安装 golang 的虚拟机中,它也在那里执行 './run.sh':在终端中运行此 cmd 足以使应用联机。

下面是dockerfile->

FROM golang:1.10.4-alpine3.8

RUN apk --no-cache add ca-certificates
RUN apk add --no-cache bash

COPY . /go/src/orpat

WORKDIR /go/src

EXPOSE 8084/tcp

RUN chmod -vR 777 /go/src/orpat

CMD [ "bash", "run.sh" ]

通过“docker build -t orpat”创建图像。工作正常。

a@kc:~/docker/orpat$ sudo docker build -t orpat .
Sending build context to Docker daemon  12.02MB
Step 1/8 : FROM golang:1.10.4-alpine3.8
 ---> 20834f40149c
Step 2/8 : RUN apk --no-cache add ca-certificates
 ---> Running in 154c0f3024f1
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
OK: 5 MiB in 14 packages
Removing intermediate container 154c0f3024f1
 ---> 50d5c49f8eee
Step 3/8 : RUN apk add --no-cache bash
 ---> Running in b3c9ad1bfe06
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
(1/5) Installing ncurses-terminfo-base (6.1_p20180818-r1)
(2/5) Installing ncurses-terminfo (6.1_p20180818-r1)
(3/5) Installing ncurses-libs (6.1_p20180818-r1)
(4/5) Installing readline (7.0.003-r0)
(5/5) Installing bash (4.4.19-r1)
Executing bash-4.4.19-r1.post-install
Executing busybox-1.28.4-r0.trigger
OK: 14 MiB in 19 packages
Removing intermediate container b3c9ad1bfe06
 ---> 8ac100f8ab2f
Step 4/8 : COPY . /go/src/orpat
 ---> 7545fd3bf0d4
Step 5/8 : WORKDIR /go/src
 ---> Running in 469df33c4fea
Removing intermediate container 469df33c4fea
 ---> 69f0e4c2c42f
Step 6/8 : EXPOSE 8084/tcp
 ---> Running in 716e1d7b7f0f
Removing intermediate container 716e1d7b7f0f
 ---> 2bbd4e3c90b7
Step 7/8 : RUN chmod -vR 777 /go/src/orpat
 ---> Running in 1e9286d6f9ad
mode of '/go/src/orpat' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/500.txt' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/405.xml' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/500.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/405.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/404.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/500.xml' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/500.json' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/403.txt' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/403.json' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/404.txt' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/404.json' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/405.txt' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/404.xml' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/404-dev.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/405.json' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/403.xml' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/500-dev.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/templates/errors/403.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/conf' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/revel/conf/mime-types.conf' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/testrunner.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/app' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/app/plugin.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/app/controllers' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/app/controllers/testrunner.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/app/views' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/app/views/TestRunner' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/app/views/TestRunner/SuiteResult.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/app/views/TestRunner/Index.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/app/views/TestRunner/FailureDetail.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public/js' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public/js/jquery-1.9.1.min.js' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public/js/bootstrap.min.js' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public/js/highlight.pack.js' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public/images' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public/images/favicon.png' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public/css' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public/css/github.css' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/public/css/bootstrap.min.css' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/conf' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/testrunner/conf/routes' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/static' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/static/static.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/static/app' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/static/app/controllers' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/github.com/revel/modules/static/app/controllers/static.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/log' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/log/orpat-requests.json' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/README.md' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/tmp' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/tmp/main.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/init.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/routes' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/routes/routes.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/controllers' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/controllers/app.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views/header.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views/footer.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views/flash.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views/debug.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views/App' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views/App/Index.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views/errors' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views/errors/500.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/app/views/errors/404.html' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/messages' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/messages/sample.en' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/js' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/js/bootstrap-3.3.6.min.js' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/js/jquery-2.2.4.min.js' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/fonts' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/fonts/glyphicons-halflings-regular.woff2' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/fonts/glyphicons-halflings-regular.woff' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/fonts/glyphicons-halflings-regular.ttf' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/img' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/img/favicon.png' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/css' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/public/css/bootstrap-3.3.6.min.css' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/tests' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/tests/apptest.go' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/conf' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/conf/routes' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/src/orpat/conf/app.conf' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/run.sh' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/Dockerfile' changed to 0777 (rwxrwxrwx)
mode of '/go/src/orpat/orpat' changed to 0777 (rwxrwxrwx)
Removing intermediate container 1e9286d6f9ad
 ---> cceab940ff2c
Step 8/8 : CMD [ "bash", "run.sh" ]
 ---> Running in 41b7bf5daee6
Removing intermediate container 41b7bf5daee6
 ---> 51ee4984d102
Successfully built 51ee4984d102
Successfully tagged orpat:latest

但是在从图像创建容器时,它被创建并处于退出状态。重新启动时,它再次进入 Exited。浏览器8084端口无法浏览应用。

a@kc:~/docker/orpat$ sudo docker run -d -it -p 8084:8084 orpat
e0d87929635b1a0340b7ef297c1d01c1b9961d3e7562da6e9d79691a579058fd
a@kc:~/docker/orpat$ sudo docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a@kc:~/docker/orpat$ sudo docker ps --all
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
e0d87929635b        orpat               "bash run.sh"            17 seconds ago      Exited (127) 16 seconds ago                       naughty_easley
7ed9b052abff        sample:1.0          "npm start"              5 days ago          Exited (0) 4 days ago                             sample_app
74b229937da3        mongo:3.0.15        "docker-entrypoint.s…"   5 days ago          Exited (0) 4 days ago                             sample_db
a@kc:~/docker/orpat$ sudo docker container start naughty_easley 
naughty_easley
a@kc:~/docker/orpat$ sudo docker ps --all
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
e0d87929635b        orpat               "bash run.sh"            46 seconds ago      Exited (127) 2 seconds ago                       naughty_easley
7ed9b052abff        sample:1.0          "npm start"              5 days ago          Exited (0) 4 days ago                            sample_app
74b229937da3        mongo:3.0.15        "docker-entrypoint.s…"   5 days ago          Exited (0) 4 days ago                            sample_db

所以我进入一个全新的容器,然后执行这个->

'sudo docker run -it -p 8084:8084 orpat bash'

并收到类似的错误->

a@kc:~/docker/orpat$ sudo docker run -it -p 8084:8084 orpat bash
bash-4.4# pwd
/go/src
bash-4.4# ls -a
.      ..     orpat
bash-4.4# cd orpat/
bash-4.4# ls -a
.           ..          Dockerfile  orpat       run.sh      src
bash-4.4# cat Dockerfile 
FROM golang:1.10.4-alpine3.8

RUN apk --no-cache add ca-certificates
RUN apk add --no-cache bash

COPY . /go/src/orpat

WORKDIR /go/src

EXPOSE 8084/tcp

RUN chmod -vR 777 /go/src/orpat

CMD [ "bash", "run.sh" ]
bash-4.4# ./run.sh 
./run.sh: line 3: /go/src/orpat/orpat: not found
bash-4.4# bash run.sh 
run.sh: line 3: /go/src/orpat/orpat: No such file or directory
bash-4.4# cat run.sh 
#!/bin/sh
SCRIPTPATH=$(cd "$(dirname "$0")"; pwd)
"$SCRIPTPATH/orpat" -importPath orpat/ -srcPath "$SCRIPTPATH/src" -runMode prod
bash-4.4# 

在 conf 文件上,我已经

# The IP address on which to listen.
http.addr = [::]

# The port on which to listen.
http.port = 8084

谁能帮我解决这个问题,我正在寻找要部署的 exe 二进制文件。 因为这是一个只有一个页面的最小测试应用程序,所以我停留在原来的 sprint 上。

最佳答案

我做这样的事情:

CGO_ENABLED=0 revel package -m prod -a project

docker 文件:

# you could do FROM scratch if you really need nothing
FROM alpine:3.10
# add dependencies
RUN apk --no-cache add ca-certificates tzdata
# add the untarred file produced by revel package
ADD project.tar.gz /opt
# whatever port
EXPOSE 8080
# I looked inside run.sh for this
CMD ["/opt/project", "-importPath", "project", "-srcPath", "/opt/src", "-runMode", "prod"]

关于docker - 通过 'revel build <testapp>' 的 run.sh 二进制文件未在 docker 容器内运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52221785/

有关docker - 通过 'revel build <testapp>' 的 run.sh 二进制文件未在 docker 容器内运行的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  6. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  7. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  8. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  9. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  10. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

随机推荐