首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails应用程序如何设置它的环境(开发、分期等)?

Rails应用程序如何设置它的环境(开发、分期等)?
EN

Stack Overflow用户
提问于 2020-10-28 17:05:05
回答 2查看 1.9K关注 0票数 2

有一个非常令人困惑的问题

我的本地应用程序正在其staging环境中运行。我使用puma-dev作为服务器,当我通过运行tail -f ~/Library/Logs/puma-dev.log跟踪它时,它说环境是开发的,但是当我使用<%= Rails.env %>登录到我的视图时,它说staging和应用程序尝试使用它需要的任何staging环境变量,而不是development环境的变量。

该应用程序为DevelopmentStagingTestProduction提供了环境。直到最近,我才注意到它是在分阶段运行的,我不太清楚它是如何或何时切换的,但在过去的几年里,它在dev中运行得很好,我最近添加了一个分阶段env来帮助rails升级,在过去的一周里,它开始在阶段中运行。

我一直认为这是服务器在启动时设置的,但是puma-dev说它的env是开发。我不知道这是如何在舞台上运行。

启动时的puma-dev输出:

代码语言:javascript
复制
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应用程序决定在哪里或如何设置它的环境吗?因为在我的生活中,我在应用程序中找不到它。

作为基于以下答案的测试(这是有用的),我注销了以下三个变量:

  1. <%= Rails.env %>,最终成为staging
  2. <%= ENV["RAILS_ENV"] %>,它最终什么也不显示
  3. <%= 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 (我知道这些版本已经过时了。我继承了这些应用程序,并且正在开发)。这就是添加暂存环境的原因。我在升级指南中找不到任何关于这类问题的信息,所以我一开始并不怀疑它是相关的,但我想提供尽可能多的关于这个问题的信息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-11 16:01:47

今天终于想出来了。

由于将暂存环境添加到应用程序中,我想我需要在应用程序本身的puma目录中添加一些配置文件,以帮助美洲狮了解需要做什么。

老实说,我仍然不知道为什么我需要这个,因为美洲狮会说它在开发中运行,我认为这是在设置环境。

我所做的是在puma目录中添加一个config目录,然后添加一个名为development.rb的文件,并在其中放置在开发环境中运行的设置。

美洲狮/发展的内容:

代码语言:javascript
复制
#!/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! 

它现在在我的本地机器上运行,就像预期的那样。

票数 1
EN

Stack Overflow用户

发布于 2020-10-28 18:06:55

为了确保我很清楚:

  • 您的本地应用程序正在“暂存”
  • 您希望您的本地应用程序在“开发”中运行。
  • 你可以看到美洲狮在“开发”中运行,但是这个应用程序似乎在为“分期”提取变量。
  • 你想让美洲狮在“开发”中运行,然后应用程序识别它在“开发”中

美洲豹是这样的设置其环境

代码语言:javascript
复制
:environment => -> { ENV['RACK_ENV'] || "development" }

Rails集.env 像这样

代码语言:javascript
复制
# File railties/lib/rails.rb, line 73
def env
  @_env ||= ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"].presence || ENV["RACK_ENV"].presence || "development")
end

因此,如果RACK_ENVdevelopment,而RAILS_ENVstaging,那么它们将不匹配.

尝试:

代码语言:javascript
复制
RAILS_ENV=development rails server

或者,在服务器运行时检查ENV["RAILS_ENV"]ENV["RACK_ENV"]的值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64577858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档