【问题标题】:Rails 4.2 database.yml not reading rbenv-vars variablesRails 4.2 database.yml 不读取 rbenv-vars 变量
【发布时间】:2015-04-05 00:49:57
【问题描述】:

我的 VPS 安装了 rbenv-vars,我在 rails 应用程序的 config 目录中找到了 .rbenv-vars 文件。我假装在其中加载了数据库密码,但我做错了,因为rake db:create 给了我一个无密码错误。当我将密码写为字符串时,Rake 工作。

config/.rbenv-vars

DB_PASS=my_db_password

config/database.yml

  password: $DB_PASS                # Doesn't work
  #password: <%= ENV['DB_PASS'] %>  # Doesn't work
  # password: my_db_password        # Works


我让所有变量都在运行rbenv vars

ssh > rbenv 变量

export DB_PASS='my_db_password'

【问题讨论】:

  • 如果将变量加载到 vars 文件中,您可能需要重新加载 shell

标签: ruby-on-rails rbenv


【解决方案1】:

通过https://github.com/rails/rails/issues/19256#issuecomment-102980786

你可能需要做一个

spring stop

然后再试一次。这对我有用。

【讨论】:

    【解决方案2】:

    我也有同样的问题。我知道我的变量设置正确

    $ rbenv vars
    # /Users/dave/code/project/.rbenv-vars
    export SQL_SERVER_HOST='10.0.0.1'
    export SQL_SERVER_PORT='1433'
    export SQL_SERVER_USERNAME='project'
    export SQL_SERVER_PASSWORD='password'
    export SQL_SERVER_DATABASE='project-development'
    
    $ cat config/database.yml
    development:
      adapter:  sqlserver
      host:     <%= ENV['SQL_SERVER_HOST'] %>
      port:     <%= ENV['SQL_SERVER_PORT'] %>
      username: <%= ENV['SQL_SERVER_USERNAME'] %>
      password: <%= ENV['SQL_SERVER_PASSWORD'] %>
      database: <%= ENV['SQL_SERVER_DATABASE'] %>
      mode:     dblib
    

    结果:

    $ rails c
    Inside TinyTds#initialize with {:dataserver=>nil, :host=>nil, :port=>nil, :username=>nil, :password=>nil, :database=>nil, :tds_version=>nil, :appname=>"project", :login_timeout=>nil, :timeout=>nil, :encoding=>nil, :azure=>nil}
    /Users/dave/code/project/.gems/bundler/gems/tiny_tds-afef8218c3c0/lib/tiny_tds/client.rb:65:in `initialize': missing :host option if no :dataserver given (ArgumentError)
    ...
    

    可能是因为rbenv-vars 还没有将变量加载到我的会话中?

    有趣的是,当我将显式值放入 config/database.yml 时,它不会在 rails 服务器启动时初始化 tiny_tds,而是在加载第一个模型时:

    $ rails c
    Loading development environment (Rails 4.2.2)
    [1] pry(main)> # No TinyTds#initialize!!!
    [2] pry(main)> User.first
    Inside TinyTds#initialize with {:dataserver=>nil, :host=>"10.0.0.1", :port=>1433, :username=>"project", :password=>"password", :database=>"project-development", :tds_version=>nil, :appname=>"project", :login_timeout=>nil, :timeout=>nil, :encoding=>nil, :azure=>nil}
      SQL (0.6ms)  USE [project-development]
      User Load (3.7ms)  EXEC sp_executesql N'SELECT  [users].* FROM [users]  ORDER BY [users].[id] ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY'
    => #<User:0x007fb8a0929fe0
     id: 1,
     ...
    

    所以rbenv-vars 似乎在启动 rails 后可以正常工作,但在启动期间却不行?

    【讨论】:

    • 有类似的问题。你找到解决办法了吗?
    【解决方案3】:

    我在secrets.yml 中从环境变量设置SECRET_KEY_BASE 时遇到了类似的问题,并且是guided to a solution by an rbenv developer。以下是基本解释:

    一般来说,database.yml 应该可以访问环境变量。 但是,为了清晰的沟通,让我们记住 database.yml 不评估自己;而是开始的过程 Rails 加载 database.yml 并计算其中的变量。所以我的 你的问题是,谁/什么启动了这个过程以及如何启动?

    您是如何启动 Rails 应用程序并确定 database.yml 被打破?您使用的是rails server,还是bundle exec,还是unicorn,或者 别的东西?对于您使用的命令,您可以运行which -a &lt;command&gt; 并告诉我结果吗?

    在我的例子中,我使用的是 Apache 和 Passenger,因此可以通过将以下内容添加到我的应用程序的 Apache 配置中来解决这个问题(即/etc/apache2/sites-available/my_app.conf):

    PassengerRuby /home/my_username/.rbenv/shims/ruby

    【讨论】:

      猜你喜欢
      • 2015-03-29
      • 2012-12-29
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多