有一个非常令人困惑的问题
我的本地应用程序正在其staging环境中运行。我使用puma-dev作为服务器,当我通过运行tail -f ~/Library/Logs/puma-dev.log跟踪它时,它说环境是开发的,但是当我使用<%= Rails.env %>登录到我的视图时,它说staging和应用程序尝试使用它需要的任何staging环境变量,而不是development环境的变量。
该应用程序为Development、Staging、Test和Production提供了环境。直到最近,我才注意到它是在分阶段运行的,我不太清楚它是如何或何时切换的,但在过去的几年里,它在dev中运行得很好,我最近添加了一个分阶段env来帮助rails升级,在过去的一周里,它开始在阶段中运行。
我一直认为这是服务器在启动时设置的,但是puma-dev说它的env是开发。我不知道这是如何在舞台上运行。
启动时的puma-dev输出:
io[19626]: Puma starting in single mode...
io[19626]: * Version 4.3.5 (ruby 2.4.6-p354), codename: Mysterious Traveller
io[19626]: * Min threads: 0, max threads: 5
io[19626]: * Environment: development有人能解释一下Rails应用程序决定在哪里或如何设置它的环境吗?因为在我的生活中,我在应用程序中找不到它。
作为基于以下答案的测试(这是有用的),我注销了以下三个变量:
<%= Rails.env %>,最终成为staging<%= ENV["RAILS_ENV"] %>,它最终什么也不显示<%= ENV["RACK_ENV"] %>,最终成为development另外,如果我运行rails控制台并输入Rails.env,也会返回'development‘。
我还在下面的答案中使用了这个建议,并运行了RAILS_ENV=development rails server。当这样做时,ENV["RAILS_ENV"]和ENV["RACK_ENV"]都被设置为开发,但是应用程序仍然运行在暂存阶段(所以上面的第一个变量没有改变,但是第二个变量改变了)。
该应用程序仍在尝试使用设置的所有暂存ENV变量(S3等)。对于这个应用程序,我最近也更新了从Rails 3.*到4.2 (我知道这些版本已经过时了。我继承了这些应用程序,并且正在开发)。这就是添加暂存环境的原因。我在升级指南中找不到任何关于这类问题的信息,所以我一开始并不怀疑它是相关的,但我想提供尽可能多的关于这个问题的信息。
发布于 2020-11-11 16:01:47
今天终于想出来了。
由于将暂存环境添加到应用程序中,我想我需要在应用程序本身的puma目录中添加一些配置文件,以帮助美洲狮了解需要做什么。
老实说,我仍然不知道为什么我需要这个,因为美洲狮会说它在开发中运行,我认为这是在设置环境。
我所做的是在puma目录中添加一个config目录,然后添加一个名为development.rb的文件,并在其中放置在开发环境中运行的设置。
美洲狮/发展的内容:
#!/usr/bin/env puma
root = "/Path/to/the/application"
daemonize false
environment "development"
directory root
pidfile "#{root}/tmp/pids/puma.pid"
stdout_redirect "#{root}/log/puma_stdout.log", "#{root}/log/puma_stderr.log", true
workers 2
threads 8,32
bind "unix:///#{root}/tmp/sockets/puma.sock"
bind "tcp://0.0.0.0:8080"
preload_app! 它现在在我的本地机器上运行,就像预期的那样。
发布于 2020-10-28 18:06:55
为了确保我很清楚:
美洲豹是这样的设置其环境:
:environment => -> { ENV['RACK_ENV'] || "development" }Rails集.env 像这样
# File railties/lib/rails.rb, line 73
def env
@_env ||= ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"].presence || ENV["RACK_ENV"].presence || "development")
end因此,如果RACK_ENV是development,而RAILS_ENV是staging,那么它们将不匹配.
尝试:
RAILS_ENV=development rails server或者,在服务器运行时检查ENV["RAILS_ENV"]和ENV["RACK_ENV"]的值。
https://stackoverflow.com/questions/64577858
复制相似问题