Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails 4中,我在哪里可以存储站点范围的变量?_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 在Rails 4中,我在哪里可以存储站点范围的变量?

Ruby on rails 在Rails 4中,我在哪里可以存储站点范围的变量?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我是Rails新手,来自ColdFusion背景,我们将在“应用程序”范围内存储全局/站点范围的变量。这将在任何视图或控制器中保持变量。Rails 4对于这种类型的东西有同等的功能吗 站点范围的变量通常不会经常更改,因此不需要以任何方式进行保护 例如,在我的情况下,我想存储网站的域名。一个用于测试,一个用于实时环境。Localhost用于开发,xxxxxx.com用于生产 任何提示或指示都会有所帮助。我在谷歌上搜索了很多,解决方案似乎太复杂了,无法完成看似如此琐碎的任务。Rails 4的最佳优雅

我是Rails新手,来自ColdFusion背景,我们将在“应用程序”范围内存储全局/站点范围的变量。这将在任何视图或控制器中保持变量。Rails 4对于这种类型的东西有同等的功能吗

站点范围的变量通常不会经常更改,因此不需要以任何方式进行保护

例如,在我的情况下,我想存储网站的域名。一个用于测试,一个用于实时环境。Localhost用于开发,xxxxxx.com用于生产


任何提示或指示都会有所帮助。我在谷歌上搜索了很多,解决方案似乎太复杂了,无法完成看似如此琐碎的任务。Rails 4的最佳优雅解决方案是什么?

这听起来像是存储在
config/environments/production.rb
config/environments/development.rb
中的配置值的完美示例。只需在此处存储任何值:

config.my_special_value = 'val'
并在应用程序中访问它,如下所示:

Rails.application.config.my_special_value
环境的价值始终处于活动状态

如果您只想拥有“全局”值,请将其存储在应用程序控制器中。您的所有视图控制器都源自应用程序控制器,因此您可以将其中的任何值保存为实例或类变量:

class ApplicationController < ActionController::Base
  MY_CONSTANT_VALUE = "foo"
end

class MyViewController < ApplicationController
  def index
    raise MY_CONSTANT_VALUE.inspect
  end
end
class ApplicationController
您还可以实现一个助手:

# app/helpers/application_helper.rb
module ApplicationHelper
  FOO = "bar"
end

# app/controllers/foo_controller.rb
class FooController < ApplicationController
  def index
    raise FOO
  end
end
#app/helpers/application_helper.rb
模块ApplicationHelper
FOO=“bar”
结束
#app/controllers/foo_controller.rb
类FooController<应用程序控制器
def索引
养富
结束
结束
您可以使用

在config/application.yml中写入变量

HELLO: world
development:
  HELLO: developers
production:
  HELLO: users
然后你可以去拿

ENV["HELLO"]

我可以推荐一种存储变量的好方法。我在生产中使用这种方法
密码可以更容易地存储到
.env
文件中
像这样

#Root dir create file ".env"
PASSWORD=123456
并加载密码

#Somewhere in app
ENV['PASSWORD'] #=> 123456
我希望它能帮助你


最简单、基本和默认的方法是使用
Rails.application.config
存储

Rails.application.config.my_config = 'foo'
您可以在环境中分配配置:

# application.rb
module MyApp
  class Application < Rails::Application
    config.my_config = 'foo'
  end
end
这种方法适用于非常简单的应用程序,但如果您想要更高级的应用程序,可以使用几种gem

我目前正在使用。主要优点是:

  • 每个环境配置。您可以为应用程序配置默认配置,然后使用特定于环境的配置覆盖默认配置
  • local.rb
    自定义覆盖文件
  • capistrano
    -类似配置样式
  • 它与gem配合得很好,非常有助于避免在repo中存储敏感凭证

    • 在rails中有一个名为

      gem 'dotenv-rails'
      
      通过使用它,我们可以将变量分配到系统级别并在应用程序中使用

      通过使用简单的步骤 首先在系统级的任何地方创建一个名为extension.env的简单文件

      //in application.rb        
      require 'dotenv'
      Dotenv.load('path-of-your-file.env')
      
      然后重新启动应用程序

      来源

      谢谢,你的第一个建议对我很有用。不过,你可能想在回答中指出,为了提取变量,你需要重新启动Rails。全局常量是全局的,可以在任何地方访问。在你的例子中,你可以只使用初始值设定项,而不需要依赖类或模块。
      //in application.rb        
      require 'dotenv'
      Dotenv.load('path-of-your-file.env')