0

我想问一下关于 ruby​​ on rails 的问题,可以使用 application.yml 设置环境变量

我在 application.yml 中有这样的代码

defaults: &defaults
  STORE_URL: https://localhost:3000/

development:
  <<: *defaults

test:
  <<: *defaults

production:
  <<: *defaults

并在 application.rb 上设置配置

Bundler.require(*Rails.groups)

if File.exists?(File.expand_path('../application.yml', __FILE__))
  config = YAML.load(File.read(File.expand_path('../application.yml', __FILE__)))
  config.merge! config.fetch(Rails.env, {})
  config.each do |key, value|
    ENV[key] ||= value.to_s unless value.kind_of? Hash
  end
end

并将此代码添加到 .gitignore

config/appication.yml
.project

当我在终端上测试时,输出应该是这样的,

[1] pry(main)> ENV
=> {"Test1"=>"Tester1",
    "Test2"=>"Tester2",
    "Test3"=>"Tester3"}

它应该在我添加一些键和值run rails c development

在 Rails 3.0.20 和 Ruby 1.9.3p545 中,当我按类型测试它或在 application.yml 上添加新的键和值时,它的工作非常简单。但是,在 Rails 4.1.5 和 Ruby 2.0.0p541 上,它不会那样

完整应用程序.rb

require File.expand_path('../boot', __FILE__)

require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

if File.exists?(File.expand_path('../application.yml', __FILE__))
  config = YAML.load(File.read(File.expand_path('../application.yml', __FILE__)))
  config.merge! config.fetch(Rails.env, {})
  config.each do |key, value|
    ENV[key] ||= value.to_s unless value.kind_of? Hash
  end
end

module ModuleUpgrade
  class Application < Rails::Application
  end
end

需要你的帮助伙计们!谢谢

4

2 回答 2

0

我会改变两件事。您如何加载文件以及如何获取和合并环境的子哈希:

Bundler.require(*Rails.groups)

file = Rails.root.join('config', 'application.yml')
if File.exists?(file)
  config = YAML.load(file).fetch(Rails.env, {})
  config.each do |key, value|
    ENV[key] ||= value unless value.kind_of?(Hash)
  end
end
于 2014-11-10T09:59:19.013 回答
0

我认为您为application.yml,指定的路径不File.expand_path('../application.yml', __FILE__)准确。尝试这个:

app_config = File.join(Rails.root, 'config', 'application.yml')
if File.exists?(app_config)
  config = YAML.load(File.read(app_config))
  config.merge! config.fetch(Rails.env, {})
  config.each do |key, value|
    ENV[key] ||= value.to_s unless value.kind_of? Hash
  end
end

或者,如果您不想自己滚动,figaro gem会尝试让您更轻松。

于 2014-11-11T23:52:00.150 回答