gpt4 book ai didi

ruby-on-rails - 在初始化程序中导入 .yml 文件时如何读取 ERb?

转载 作者:行者123 更新时间:2023-12-03 15:30:59 25 4
gpt4 key购买 nike

我发现加密的 AD ID 登录适用于数据库,但不适用于 AD 连接。在将密码传递到各自的端​​点之前,两者都使用完全相同的代码进行解密。确认加密本身正在工作。

是 ruby <%= DM::Encryption.decrypt(:staging, 'nsad;nasdnvoasidnv;asoin') %>在 adauth.rb 中分配之前没有被评估?

config/database.yml:

#...
staging:
adapter: jdbcmssql
driver: net.sourceforge.jtds.jdbc.Driver
url: 'jdbc:jtds:sqlserver://server/db;domain=DM'
username: some_id
password: <%= DM::Encryption.decrypt(:staging, 'nsad;nasdnvoasidnv;asoin') %>
pool: 10
wait-timeout: 10
#...

config/ad.yml:

#...
staging:
<<: *default
ad.bind_id: some_id
ad.bind_password: <%= DM::Encryption.decrypt(:staging, 'nsad;nasdnvoasidnv;asoin') %>
#...

初始化程序/adauth.rb:

AD_CONF = YAML.load_file(Rails.root.join('config/ad.yml'))[Rails.env]

Adauth.configure do |c|
c.domain = AD_CONF["ad.domain"]
c.query_user = AD_CONF["ad.bind_id"]
c.query_password = AD_CONF["ad.bind_password"]
c.server = AD_CONF["ad.host"]
c.base = AD_CONF["ad.user_base"]
end

最佳答案

您的问题有点不清楚,但您似乎怀疑 YAML 文件中的 ERb ( <%= ... ) 在 adauth.rb 中解析 YAML 之前没有被评估.

只需打印 AD_CONF["ad.bind_password"] 的值就可以很容易地找出答案。在 adauth.rb ——但似乎确实有可能,因为您只是在调用 YAML.load_file并且从不做任何事情来解析 ERb。如果要解析 ERb,可以在 Rails::Application::Configuration.database_configuration 中查看 Rails 是如何进行的。 .最重要的部分是:

yaml = Pathname.new(paths["config/database"].existent.first || "")
# ...snip...
YAML.load(ERB.new(yaml.read).result) || {}

按照此示例,您将更改 adauth.rb 中的第一行像这样:

ad_yaml_path = Rails.root.join('config/ad.yml')    # The path to the .yml file
ad_yaml = ERB.new( ad_yaml_path.read ).result # Read the file and evaluate the ERB
ad_hash = YAML.load(ad_yaml) # Parse the resulting YAML
AD_CONF = ad_hash[Rails.env]

(第一行有效,因为 Rails.root 是一个 Pathname 对象,Pathname#join 也返回一个路径名,Pathname#read 像 File#read 一样工作,返回文件的内容。)

当然,这可以缩短(你可以把它写成单行但很难阅读):

ad_yaml = ERB.new( Rails.root.join('config/ad.yml').read ).result
AD_CONF = YAML.load(ad_yaml)[Rails.env]

还有一点: Rails 4.2,现在处于测试阶段,has a config_for method正是这样做的。而不是上面的,你会这样做:

AD_CONF = Rails.application.config_for(Rails.root + 'config/ad.yml')

所以这很整洁。

关于ruby-on-rails - 在初始化程序中导入 .yml 文件时如何读取 ERb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25554692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com