【问题标题】:What's the proper way to have envionrment variables inserted into my configuration file?将环境变量插入我的配置文件的正确方法是什么?
【发布时间】:2017-10-30 02:30:05
【问题描述】:

使用 Rails 5.0.1。我的 config/initializers/sidekiq.rb 文件中有这个...

Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://#{ENV['REDIS_PORT_6379_TCP_ADDR']}:#{ENV['REDIS_PORT_6379_TCP_PORT']}/12', namespace: "sidekiq_app_name_#{ENV['RAILS_ENV']}" }
end

Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://#{ENV['REDIS_PORT_6379_TCP_ADDR']}:#{ENV['REDIS_PORT_6379_TCP_PORT']}/12', namespace: "sidekiq_app_name_#{ENV['RAILS_ENV']}" }
end

虽然我在我的系统中定义了环境变量,但当我尝试启动我的服务器时,我得到了这些错误...

/Users/davea/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in `load': /Users/davea/Documents/workspace/myproject/config/initializers/sidekiq.rb:2: syntax error, unexpected tCONSTANT, expecting '}' (SyntaxError)
{ENV['REDIS_PORT_6379_TCP_ADDR']}:#{ENV['REDIS_PORT_6379_TCP
                              ^
/Users/davea/Documents/workspace/myproject/config/initializers/sidekiq.rb:2: syntax error, unexpected tCONSTANT, expecting keyword_end
{ENV['REDIS_PORT_6379_TCP_PORT']}/12', namespace: "sidekiq_a
                              ^
/Users/davea/Documents/workspace/myproject/config/initializers/sidekiq.rb:2: syntax error, unexpected '}', expecting end-of-input
pp_name_#{ENV['RAILS_ENV']}" }

将环境变量插入我的配置文件的正确方法是什么?

【问题讨论】:

    标签: configuration environment-variables ruby-on-rails-5 sidekiq


    【解决方案1】:

    您可以使用 gem figaro:

    gem "figaro"
    

    如何使用,在readme.txt很容易解释:

    config/application.yml
    
    stripe_api_key: "sk_live_dSqzdUq80sw9GWmuoI0qJ9rL"
    
    
    
    ENV["stripe_api_key"] # => "sk_live_dSqzdUq80sw9GWmuoI0qJ9rL"
    ENV.key?("stripe_api_key") # => true
    ENV["google_analytics_key"] # => nil
    ENV.key?("google_analytics_key") # => false
    
    Figaro.env.stripe_api_key # => "sk_live_dSqzdUq80sw9GWmuoI0qJ9rL"
    Figaro.env.stripe_api_key? # => true
    Figaro.env.google_analytics_key # => nil
    Figaro.env.google_analytics_key? # => false
    

    【讨论】:

    • 所以我理解正确,为什么 figaro 与在我的 shell 中设置我的环境变量不同?例如,在启动 Rails 服务器之前,我可以运行“echo $REDIS_PORT_6379_TCP_ADDR”并取回一个值(“localhost”)。我遇到的上述错误是因为 Rails 没有获取我的全局环境变量吗?
    • @Dave ,没错,figaro 只是帮助您实现这一目标的工具!但是你可以没有它,我可能认为如果你从另一个角度看待问题,你可以实现你的目标
    • @Dave 希望我的回答对您有所帮助
    • 您好,非常感谢您提供不同的观点。我将删除我的 shell 环境变量定义并试一试您的解决方案,看看我是否得到不同的结果。
    猜你喜欢
    • 2019-12-20
    • 2018-11-02
    • 1970-01-01
    • 2011-04-04
    • 2023-04-02
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多