Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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应用程序中存储全局文件的最佳位置是哪里?_Ruby On Rails_Ruby_Environment Variables - Fatal编程技术网

Ruby on rails 在Rails应用程序中存储全局文件的最佳位置是哪里?

Ruby on rails 在Rails应用程序中存储全局文件的最佳位置是哪里?,ruby-on-rails,ruby,environment-variables,Ruby On Rails,Ruby,Environment Variables,我想知道在rails应用程序中的全局设置存储位置是否有最佳实践。我的意思是,我定义了几个global,它们可能会改变,但不太可能,而且似乎不适合将它们存储在DB中,因为它们被大量使用。例如,我有系统电子邮件和系统电子邮件签名和系统存储根 现在我将它们保存在environment.rb中,但我不确定这是否是存储它们的正确位置 多谢各位 编辑: 被接受的答案仍然合适,但自从我开始使用后,还有其他选项,但我最喜欢configatron。environment.rb就是这个地方。您可以将其添加到模块并添

我想知道在rails应用程序中的全局设置存储位置是否有最佳实践。我的意思是,我定义了几个global,它们可能会改变,但不太可能,而且似乎不适合将它们存储在DB中,因为它们被大量使用。例如,我有系统电子邮件和系统电子邮件签名和系统存储根

现在我将它们保存在environment.rb中,但我不确定这是否是存储它们的正确位置

多谢各位

编辑:


被接受的答案仍然合适,但自从我开始使用后,还有其他选项,但我最喜欢configatron。

environment.rb就是这个地方。您可以将其添加到模块并添加到lib目录。然后您可以将其称为Module::MY_GLOBAL_变量。两者都有优点和缺点。在environment.rb中可以,但有时看起来很凌乱。如果所有这些全局变量都是相关的,那么您可以将它们分组到一个模块中。

Rails 3引入了应用程序对象。即使使用Rails 2,您也可能希望以类似的方式存储全局变量。

因为这些值经常根据您运行的环境而变化,所以我将全局变量存储在
config/environments/development.rb | production.rb | test.rb
中,为每个环境使用适当的值。

我将此类配置信息存储在YML文件中。有关更多详细信息,请参阅此


或者,您可以使用名为

的gem。我最喜欢的技术之一是将包含常量的文件放在目录
config/initializers/
中(此目录中的所有文件都会自动加载),但每个不同的Rails环境都有一个节。e、 g


case ENV['RAILS_ENV']
  when "development"
    SYSTEM_EMAIL = ...
    SYSTEM_EMAIL_SIGNATURE = ...
  when "staging"
    SYSTEM_EMAIL = ...
    SYSTEM_EMAIL_SIGNATURE = ...
  when "production"  
    SYSTEM_EMAIL = ...
    SYSTEM_EMAIL_SIGNATURE = ...
end
相反,如果您想在一个大散列中加载所有常量,那么可以将它们作为YAML文件加载。创建两个文件,一个名为
config/initializers/email_constants.rb
,另一个名为
config/email_constants.yml
。在后一种情况下,可以这样说:


development:
  :system_email: ...
  :system_email_signature: ...
staging:
  :system_email: ...
   system_email_signature: ...

... etc ...
然后在
config/initializers/email_constants.rb
put中:


EMAIL_CONSTANTS = YAML.load_file("#{RAILS_ROOT}/config/email_constants.yml")[RAILS_ENV]
这将加载整个YAML文件,并将相应键的值(表示
RAILS\u ENV
)分配给
EMAIL\u常量


这两种技术的优点都是局部性。您可以将所有相互关联的常量(即本例中的电子邮件常量)放在一个文件中。另外,不是让相同的常量分布在三个不同的文件中(每个Rails环境一个),而是将它们全部放在一个文件中。

通常,当我做类似的事情时,我有两种方法

1-如果我的全局变量对所有3个环境(开发、测试、生产)都是通用的,那么我将把它存储在

config/environments.rb文件

但让我们说我的价值观随着环境的变化而变化

例如:我的开发环境系统存储根是“/development\u ROOT/”,测试环境系统存储根是“/testing\u ROOT/”

然后我会把它们放在里面

配置/环境/

根据上面的例子

config/environments/development.rb将具有 系统存储根='/development根/'

config/environments/test.rb将具有 系统存储根='/testing根/'

config/environments/production.rb将具有 系统存储根='/production根/'

希望这有帮助

干杯,
sameera

有趣的是,我最近开始研究Rails 3,特别是routes,但没有读太多其他内容。我来看看。谢谢你的指点,谢谢你,肖恩。我最喜欢你的方法-除了我不认为我需要分开到email_constants.yml中-我将保持所有内容都在contacnts.yml中。关于在dev/prod/test中应该相同的常量如何?有一个文件适用于所有三种环境,而不是将它们存储在所有三种环境中吗?我自己的评论的答案似乎是/config/environment.rb。如果我错了,请有人纠正我。谢谢你发布确认@Ben我只是在搜索完全相同的东西。这似乎比标记为“答案”的答案要好得多。如果Rails已经为您提供了环境的case语句,那么为什么还要提供环境的case语句呢?还要注意,如果您使用environment.rb,那么您可能需要在您的appname::Application.initialize之前定义常量!