Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/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 3:有没有办法放置gem';是否在environment.rb而不是foo.yml中设置s config参数?_Ruby On Rails_Environment Variables_Yaml - Fatal编程技术网

Ruby on rails rails 3:有没有办法放置gem';是否在environment.rb而不是foo.yml中设置s config参数?

Ruby on rails rails 3:有没有办法放置gem';是否在environment.rb而不是foo.yml中设置s config参数?,ruby-on-rails,environment-variables,yaml,Ruby On Rails,Environment Variables,Yaml,My rails应用程序使用的gem要求在foo.yml中指定一些配置参数: development: username: MyDevUserName password: MyDevPassword production: username: MyPRODUserName password: MyPRODPassword 我不想在源代码中使用密码,而是想执行以下操作: development: username: <%= ENV['THE_USERNAME'] %&g

My rails应用程序使用的gem要求在foo.yml中指定一些配置参数:

development:
  username: MyDevUserName
  password: MyDevPassword
production:
  username: MyPRODUserName
  password: MyPRODPassword
我不想在源代码中使用密码,而是想执行以下操作:

development:
  username: <%= ENV['THE_USERNAME'] %>
  password: <%= ENV['THE_PASSWORD'] %>
production:
  username: <%= ENV['THE_USERNAME'] %>
  password: <%= ENV['THE_PASSWORD'] %>
编辑:既然你在Heroku上

赫罗库是另一个故事。您对ENV的使用可能与Heroku中内置的一些用于处理配置变量(例如您正在使用的配置变量)的功能相冲突。你需要(drumroll,谢谢)配置变量。有关如何在Heroku部署中设置配置变量、如何从应用程序访问配置变量以及如何使其在本地工作的信息,请参阅

编辑:以下是原始答案,仍然适用于一般(非heroku)情况

即使您将它放在environment.rb中,它仍然会出现在源代码中

正确的方法是忽略版本控制中的foo.yml文件(例如,在git中,您可以将该文件添加到.gitignore文件)。这样,您就可以将文件放在您需要的本地位置,但它永远不会提交到您的存储库中,因此您的信誉不会公开。在部署服务器上,您还必须手动创建该文件,因为当您从源代码部署时,部署将没有该文件

如果您正在使用capistrano进行部署,一种常见的方法是将文件放在[app]/shared/config/foo.yml中,然后将部署任务从[sharedpath]添加到[releasepath]的softlink中。capistrano中的此类任务可能如下所示:

task :after_update_code do
  run "ln -s #{shared_path}/config/foo.yml #{release_path}/config/foo.yml"
end

感谢您提供的信息,但我希望有一种方法能够从ENV变量自动加载,因为我们在Heroku上,而且该功能很容易部署。@jpwynn我已经用Heroku特定的指导更新了我的答案。
task :after_update_code do
  run "ln -s #{shared_path}/config/foo.yml #{release_path}/config/foo.yml"
end