Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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_Configuration_Environment Variables - Fatal编程技术网

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

Ruby on rails 如何在Rails应用程序中设置环境变量?,ruby-on-rails,configuration,environment-variables,Ruby On Rails,Configuration,Environment Variables,我正在使用Rails 4.2.3,并试图创建只能在我的应用程序中访问的环境变量(而不是将它们存储在~/.bashrc文件或某些特定于操作系统的解决方案中)。因此,我创建了文件“config/environment_variables.yml”,其中 development: GOOGLE_CLIENT_ID: 999995268318-o5ejue1pgtsjoid0f0k8r7lcksfse6hk.apps.googleusercontent.com GOOGLE_SECRET: 28

我正在使用Rails 4.2.3,并试图创建只能在我的应用程序中访问的环境变量(而不是将它们存储在~/.bashrc文件或某些特定于操作系统的解决方案中)。因此,我创建了文件“config/environment_variables.yml”,其中

development:
  GOOGLE_CLIENT_ID: 999995268318-o5ejue1pgtsjoid0f0k8r7lcksfse6hk.apps.googleusercontent.com
  GOOGLE_SECRET: 28bfoTU_RbRKkdxv7_wkNzw5
  FACEBOOK_KEY: 1588888667329742
  FACEBOOK_SECRET: 4444g1faeb11111e5392892d397b79f8e
production:
  GOOGLE_CLIENT_ID: 999995268318-o5ejue1pgtsjoid0f0k8r7lcksfse6hk.apps.googleusercontent.com
  GOOGLE_SECRET: 28bfoTU_RbRKkdxv7_wkNzw5
  FACEBOOK_KEY: 1588888667329742
  FACEBOOK_SECRET: 4444g1faeb11111e5392892d397b79f8e
然后我创建了文件“config/initializers/environment_variables.rb”

module EnvironmentVariablesExample
  class Application < Rails::Application
    config.before_configuration do
      env_file = Rails.root.join("config", 'environment_variables.yml').to_s

      if File.exists?(env_file)
        YAML.load_file(env_file)[Rails.env].each do |key, value|
          ENV[key.to_s] = value
        end # end YAML.load_file
      end # end if File.exists?
    end # end config.before_configuration
  end # end class
end # end module
模块环境变量示例
类应用程序
但是当我在本地机器上用“rails s”启动服务器时,我会遇到这个错误

Exiting
/Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:8:in `[]=': no implicit conversion of Fixnum into String (TypeError)
    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:8:in `block (2 levels) in <class:Application>'
    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:7:in `each'
    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:7:in `block in <class:Application>'
    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'
    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'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/lazy_load_hooks.rb:27:in `each'
    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'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/railtie/configuration.rb:53:in `before_configuration'
    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:3:in `<class:Application>'
    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:2:in `<module:EnvironmentVariablesExample>'
    from /Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:1:in `<top (required)>'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `block in load'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:240:in `load_dependency'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in `load'
    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'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active_support/notifications.rb:166:in `instrument'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:651:in `load_config_initializer'
    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>'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:615:in `each'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:615:in `block in <class:Engine>'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/initializable.rb:30:in `instance_exec'
    from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/initializable.rb:30:in `run'
    …
退出
/Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:8:in`[]=':没有将Fixnum隐式转换为字符串(TypeError)
from/Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:8:in'block(2层)in'
from/Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:7:in'each'
from/Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:7:in'block in'
来自/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active\u-support/lazy\u-load\u-hooks.rb:36:in'execute\u-hook'
来自/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active\u-support/lazy\u-load\u-hooks.rb:28:'block-in-on\u-load'
来自/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active\u support/lazy\u load\u hooks.rb:27:in'each'
来自/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active\u support/lazy\u load\u hooks.rb:27:in“on\u load”
from/Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/railtie/configuration.rb:53:in`before_configuration'
来自/Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:3:in`'
来自/Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:2:in`'
来自/Users/davea/Documents/workspace/pushupmoose/config/initializers/environment_variables.rb:1:in`'
来自/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active\u support/dependencies.rb:268:in'load'
from/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active\u support/dependencies.rb:268:in'block in load'
来自/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active\u support/dependencies.rb:240:in'load\u dependency'
来自/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active\u support/dependencies.rb:268:in'load'
from/Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:652:“加载块配置初始值设定项”
来自/Users/davea/.rvm/gems/ruby-2.3.0/gems/activesupport-4.2.5/lib/active\u support/notifications.rb:166:in“instrument”
from/Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:651:in'load\u config\u initializer'
from/Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:616:in `块(2层)in'
from/Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:615:in'each'
from/Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/engine.rb:615:in'block-in'
from/Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/initializable.rb:30:in'instance_exec'
from/Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.5/lib/rails/initializable.rb:30:in'run'
…

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

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

您的
FACEBOOK\u键
值是数值,而
YAML.load\u文件
将尊重这些数值。然后,它将尝试将这些数值存储在
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"
因此,如果您将您的
FACEBOOK\u键
值用双引号括起来,您应该可以:

development:
  FACEBOOK_KEY: "1588888667329742"

您可以使用名为dotenv-rails的gem。文件如下: 只需在文件中写入:

gem 'dotenv-rails'
export GOOGLE_CLIENT_ID=YOUR_ID
然后运行bundle安装。 之后,在名为“.env.local”的应用程序主目录中创建一个文件,并在该文件中写入:

gem 'dotenv-rails'
export GOOGLE_CLIENT_ID=YOUR_ID
(不带任何引号的ID)和您要使用的点只需写:

ENV['GOOGLE_CLIENT_ID']
对于生产,只需创建另一个文件“.env.production”。 记住在gitignore中调用“.env*”


有关开发和生产中环境变量的更多信息,请查看此博客帖子:

如果您保留环境变量。在应用程序本身的变量中,您最好不要更改任何内容,对吗?使用环境变量的主要原因是,如果您将此应用程序推送到git,并且向公众显示您的密钥以及其他内容。如果你想把东西保存在应用程序内部,而不是存储在网站外,我建议至少将这些敏感文件添加到gitignore中。如果您正在与其他人协作,您可以使用“git更新索引--假定未更改”,这将停止跟踪更改,但不会从repo中删除。只需在第一次提交后更改信息。是的,此文件将进入.gitignore,但将此文件放入.gitignore如何修复错误消息?请尝试
put key.to\s;在
ENV[key.to\s]=value之前放置value
,然后查看服务器停止的位置…它将告诉您导致错误的罪魁祸首变量…只是一个粗略的猜测,可能需要
value.to\s
+1将值转换为字符串。你应该使用gem,它为你做了繁重的工作,而且很容易实现。我Sulman Baig链接断了,我做了你说的所有事情,但是我的