Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.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_Ruby_Rake - Fatal编程技术网

Ruby on rails 生产中未识别rails密钥库

Ruby on rails 生产中未识别rails密钥库,ruby-on-rails,ruby,rake,Ruby On Rails,Ruby,Rake,因此,我正在尝试在生产环境中部署我的rails应用程序。当我转到页面时,我得到一个500错误。当我转到错误日志时,我得到以下错误: Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) 我运行的是Rails 4.1,我的config/secrets.yml

因此,我正在尝试在生产环境中部署我的rails应用程序。当我转到页面时,我得到一个500错误。当我转到错误日志时,我得到以下错误:

Exception RuntimeError in Rack application object (Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`) 
我运行的是Rails 4.1,我的config/secrets.yml如下所示:

    development:
      secret_key_base: <development key>        
    test:
      secret_key_base: <test key>

    # Do not keep production secrets in the repository,
    # instead read values from the environment.
    production:
      secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
开发:
机密密钥库:
测试:
机密密钥库:
#不要在存储库中保留生产机密,
#而是从环境中读取值。
制作:
机密密钥库:
我运行rake secret来获取密钥,并将导出放入我的bash_配置文件中,并将其来源化。我成功运行了rake资产:预编译。但我还是不断地犯这个错误。有什么想法吗

更新:我试图更新提供的错误消息以提供更好的信息…但消息没有更新。然后,我尝试将密钥直接添加到yml文件中,而不是使用环境变量,但仍然没有骰子。我在hostmonster上运行,所以我无法重新启动服务器…但有些事情告诉我这就是需要做的

更新2:在睡了一夜之后,这个问题似乎不再是问题了。它一定是某种缓存。现在我的问题是,它试图使用我几天前为数据库更改的旧配置。如果我知道如何取消缓存,我会把它贴在这里,并把它标记为一个答案。如果其他人知道怎么做,请让我知道,我会标记它作为一个答案。我使用HostMonster作为我的主机,并遵循他们在其网站上为我的rails应用程序提供主机的步骤

  • 您需要重新启动服务器,因为在
    YourAppName::Application.initialize之后config/environment.rb
    中调用code>,无法更改设置
  • 签出您的yml标记,可能有一些错误
  • 您的config/initializers/secret_token.rb可能有问题

  • 问题不在于ENV伪哈希。如果在环境中没有这样的密钥,则secret\u key\u base将为零。

    我遇到了同样的问题,我解决了创建一个环境变量的问题,该变量将在每次登录到生产服务器并自行配置时加载:

    因此,我将Rails 4.1与Unicorn v4.8.2一起使用,当我尝试部署我的应用程序时,它没有正确启动,并在Unicorn.log文件中发现以下错误消息:

    应用程序错误:缺少“生产”环境的
    secret\u key\u base
    ,请在
    config/secrets.yml
    中设置此值(RuntimeError)

    经过一点研究,我发现Rails 4.1改变了管理密钥的方式,因此如果我们阅读位于
    exampleRailsProject/config/secrets.yml
    secrets.yml文件(您需要将“exampleRailsProject”替换为您的项目名称),您会发现如下内容:

        development:
          secret_key_base: <development key>        
        test:
          secret_key_base: <test key>
    
        # Do not keep production secrets in the repository,
        # instead read values from the environment.
        production:
          secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
    
    # Do not keep production secrets in the repository,
    # instead read values from the environment.
    production:
      secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
    
    这将给出一个包含字母和数字的大字符串,这是您需要的,所以请复制它(我们将该代码称为生成的代码)

    2.1-现在,如果我们以root用户身份登录到服务器,我们需要找到此文件并打开它:

    $ vi /etc/profile
    
    然后我们转到文件的底部(“SHIFT+G”表示VI中的大写字母G)

    我们将使用生成的_代码编写环境变量(按“i”键在VI中编写),确保在文件末尾的新行中:

    export SECRET_KEY_BASE=GENERATED_CODE
    
    export SECRET_KEY_BASE=GENERATED_CODE
    
    编写代码后,我们保存更改并关闭文件(我们按下“ESC”键,然后写入“:x”和“ENTER”键以保存并在VI中退出)

    2.2但如果我们以普通用户身份登录,我们可以将其称为示例用户,我们需要找到以下其他文件之一:

    $ vi ~/.bash_profile
    $ vi ~/.bash_login
    $ vi ~/.profile
    
    这些文件是按重要性排序的,这意味着如果你有第一个文件,那么你就不需要写其他文件了。因此,如果您在目录“~/.bash\u profile”和“~/.profile”中找到这两个文件,您只需在第一个“~/.bash\u profile”中写入,因为linux将只读取这一个,而忽略另一个

    然后我们转到文件的底部(“SHIFT+G”表示VI中的大写字母G)

    我们将使用生成的_代码编写环境变量(按“i”键在VI中编写),确保在文件末尾的新行中:

    export SECRET_KEY_BASE=GENERATED_CODE
    
    export SECRET_KEY_BASE=GENERATED_CODE
    
    编写代码后,我们保存更改并关闭文件(我们按下“ESC”键,然后写入“:x”和“ENTER”键以保存并在VI中退出)

    3.-我们可以使用以下命令验证环境变量是否在linux中正确设置:

    $ printenv | grep SECRET_KEY_BASE
    
    或与:

    $ echo $SECRET_KEY_BASE
    
    当您执行此命令时,如果一切正常,它将向您显示我们之前生成的_代码。最后,完成所有配置后,您可以使用Unicorn或其他工具毫无问题地部署Rails应用程序

    现在,当您关闭shell终端并再次登录到生产服务器时,您将设置此环境变量并准备使用它


    就这样!!我希望本小指南能帮助您解决此错误。

    我正在使用Hostmonster托管此应用程序(共享托管)…如何重新启动服务器?此外,在4.1中没有配置/初始化器/secret_token.rb。现在只有一个config/secrets.yml,我在上面发布了它来检查部署设置。可能您需要在链接的_文件中指定config/secrets.yml(如果您使用的是capistrano,则类似于database.yml),但我不使用capistrano。使用hostmonster,您只需使用一些乘客配置设置一个.htaccess文件,然后就可以运行了。我已经让它在环境设置为“开发”的情况下工作,但当我切换到“生产”时,它给我带来了问题,错误如上所述。事实上,您的回答是正确的。为了便于将来重新启动主机服务器,只需从应用程序库目录运行
    触摸tmp/restart.txt
    。一旦我这么做了,它就收到了我的新信息。谢谢