如何在 Rails 应用程序中设置环境变量?

Dav*_*ave 5 configuration ruby-on-rails environment-variables

I\xe2\x80\x99m 使用 Rails 4.2.3 并尝试创建只能在我的应用程序中访问的环境变量(而不是将它们存储在 ~/.bashrc 文件或某些特定于操作系统的解决方案中)。所以我创建了文件 \xe2\x80\x9cconfig/environment_variables.yml\xe2\x80\x9d

\n\n
development:\n  GOOGLE_CLIENT_ID: 999995268318-o5ejue1pgtsjoid0f0k8r7lcksfse6hk.apps.googleusercontent.com\n  GOOGLE_SECRET: 28bfoTU_RbRKkdxv7_wkNzw5\n  FACEBOOK_KEY: 1588888667329742\n  FACEBOOK_SECRET: 4444g1faeb11111e5392892d397b79f8e\nproduction:\n  GOOGLE_CLIENT_ID: 999995268318-o5ejue1pgtsjoid0f0k8r7lcksfse6hk.apps.googleusercontent.com\n  GOOGLE_SECRET: 28bfoTU_RbRKkdxv7_wkNzw5\n  FACEBOOK_KEY: 1588888667329742\n  FACEBOOK_SECRET: 4444g1faeb11111e5392892d397b79f8e\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我创建了文件 \xe2\x80\x9cconfig/initializers/environment_variables.rb\xe2\x80\x9d

\n\n
module EnvironmentVariablesExample\n  class Application < Rails::Application\n    config.before_configuration do\n      env_file = Rails.root.join("config", \'environment_variables.yml\').to_s\n\n      if File.exists?(env_file)\n        YAML.load_file(env_file)[Rails.env].each do |key, value|\n          ENV[key.to_s] = value\n        end # end YAML.load_file\n      end # end if File.exists?\n    end # end config.before_configuration\n  end # end class\nend # end module\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我使用 \xe2\x80\x9crails s,\xe2\x80\x9d 在本地计算机上启动服务器时,出现此错误

\n\n
Exiting\n/Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:8:in `[]=\': no implicit conversion of Fixnum into String (TypeError)\n    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:8:in `block (2 levels) in <class:Application>\'\n    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:7:in `each\'\n    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:7:in `block in <class:Application>\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/lazy_load_hooks.rb:36:in `execute_hook\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/lazy_load_hooks.rb:28:in `block in on_load\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/lazy_load_hooks.rb:27:in `each\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/lazy_load_hooks.rb:27:in `on_load\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/railtie/configuration.rb:53:in `before_configuration\'\n    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:3:in `<class:Application>\'\n    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:2:in `<module:EnvironmentVariablesExample>\'\n    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:1:in `<top (required)>\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `block in load\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:240:in `load_dependency\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:652:in `block in load_config_initializer\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/notifications.rb:166:in `instrument\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:651:in `load_config_initializer\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:615:in `each\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:615:in `block in <class:Engine>\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/initializable.rb:30:in `instance_exec\'\n    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/initializable.rb:30:in `run\'\n    \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在上面设置的环境中做错了什么?谢谢,-戴夫

\n

Sha*_*ell 1

我认为错误不是因为您如何设置该值,而是因为您设置的值。

您的FACEBOOK_KEY价值观是人们会尊重的数字YAML.load_file。然后它会尝试将这些数值存储在ENV. 但是,ENV只喜欢字符串值。

2.2.1 :019 > ENV['test'] = 1
TypeError: no implicit conversion of Fixnum into String
from (irb):19:in `[]='
from (irb):19

2.2.1 :020 > ENV['test'] = '1'
=> "1"
Run Code Online (Sandbox Code Playgroud)

因此,如果您将FACEBOOK_KEY值用双引号引起来,应该没问题:

development:
  FACEBOOK_KEY: "1588888667329742"
Run Code Online (Sandbox Code Playgroud)