Ruby on rails docker中的ruby unicorn作为服务-使用了错误的rake
我的问题是,我可以在docker中将unicorn作为一项服务启动,但如果我从命令行启动它,它的工作就可以了 尝试使用unicorn和nginx web服务器docker映像构建ruby。 用作ruby:2.3的基础Ruby on rails docker中的ruby unicorn作为服务-使用了错误的rake,ruby-on-rails,docker,rake,unicorn,Ruby On Rails,Docker,Rake,Unicorn,我的问题是,我可以在docker中将unicorn作为一项服务启动,但如果我从命令行启动它,它的工作就可以了 尝试使用unicorn和nginx web服务器docker映像构建ruby。 用作ruby:2.3的基础。但最新的ubuntu也遇到了同样的问题。 本文非常直接地解释了如何将unicorn与nginx结合使用。 如果我像这样从bash开始,一切似乎都正常 (cd/app&bundle exec unicorn-c/app/config/unicorn.rb-E uat-D) 但如果启动
。但最新的ubuntu也遇到了同样的问题。
本文非常直接地解释了如何将unicorn与nginx结合使用。
如果我像这样从bash开始,一切似乎都正常
(cd/app&bundle exec unicorn-c/app/config/unicorn.rb-E uat-D)
但如果启动它作为服务,我会看到错误
service unicorn\u appname start
错误是:
bundler:未找到命令:unicorn
在我做了一些调查之后,我意识到问题最有可能出现在env变量中,因为服务实际上试图使用su-root-c
前缀执行我的命令:
su-root-c“cd/app&bundle exec unicorn-c config/unicorn.rb-E uat-D”
此命令产生相同的错误
虽然我在bash中也是以root身份登录的
在谷歌搜索了一段时间后,我发现部分解决方案-设置PATH env变量如下:
su-root-c“PATH=\”$(ruby-e'print Gem.default\u dir')/bin:$PATH\”&cd/app&&bundle exec unicorn-c config/unicorn.rb-e uat-D“
但是现在我看到在任何源代码中都找不到rake-12.0.0
和rake--version
返回rake,version 12.0.0
。同时su-root-c“rake--version”
返回rake,版本10.4.2
which rake
返回/usr/local/bundle/bin/rake
,同时su-root-c“which rake”
返回/usr/local/bin/rake
所以我猜该服务试图为rake使用错误的路径。
如何更改默认的rake路径?或任何其他建议
-----------更新-类似的解决方案-----------------
我想我在docker找到了bundler所有问题的原因。看起来bundler的所有环境变量都是在shell启动部分中设置的。因此,如果我以sudosu-appuser-c“…cmd…”
因此,我通过在bash中运行printenv
对其进行了测试。还有一个像这样的sudo su-appuser-c“printenv”
-发现了很大的不同
因为我在构建docker,所以我通过docker文件设置了它们,但如果只是导出它们,它也可以工作
ENV PATH=/usr/local/bundle/bin:/usr/local/bundle/gems/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV RUBYGEMS_VERSION=3.0.3
ENV RUBY_VERSION=2.3.8
ENV GEM_HOME=/usr/local/bundle
ENV BUNDLE_PATH=/usr/local/bundle
ENV BUNDLE_SILENCE_ROOT_WARNING=1
ENV RUBY_MAJOR=2.3
ENV BUNDLE_APP_CONFIG=/usr/local/bundle
我也有
RUN bundle config app_config /usr/local/bundle && bundle config path /usr/local/bundle
由于正确的方法是不在web应用程序中使用root,因此我在docker文件中重建了所有内容,以便它创建并使用单独的用户(但我想这部分是可选的):
希望我的更新能节省一些时间
RUN adduser --disabled-password --gecos "" appuser
....
#installing sudo
RUN apt-get update
RUN apt-get install -y sudo
....
# gives sudo to new user
RUN echo "appuser ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/appuser && chmod 0440 /etc/sudoers.d/appuser
....
#don't forget to give rights to your folder for new user like this:
#RUN sudo chown -R appuser:appuser /usr/local
....
#utilize new user
USER appuser
#bundle install and rest stuff is here
....