Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 在本地和远程文件(如application.yml)中使用不同的设置_Ruby On Rails_Deployment - Fatal编程技术网

Ruby on rails 在本地和远程文件(如application.yml)中使用不同的设置

Ruby on rails 在本地和远程文件(如application.yml)中使用不同的设置,ruby-on-rails,deployment,Ruby On Rails,Deployment,在我的应用程序中,我有一些代码在本地运行与在远程服务器上开发时会发生更改,例如application.yml中的app_domain等。除了每次在本地运行与部署到远程机器时都必须手动更改这些代码外,还有更好的管理方法吗?EDIT-for yml 这在一定程度上取决于加载application.yml的方式,但通常在加载yml文件时,ruby会将其解析为一个散列。因此,您可以设置类似database.yml的内容,并在不同的环境下构建所有yml: development: domain:

在我的应用程序中,我有一些代码在本地运行与在远程服务器上开发时会发生更改,例如application.yml中的app_domain等。除了每次在本地运行与部署到远程机器时都必须手动更改这些代码外,还有更好的管理方法吗?

EDIT-for yml

这在一定程度上取决于加载application.yml的方式,但通常在加载yml文件时,ruby会将其解析为一个散列。因此,您可以设置类似database.yml的内容,并在不同的环境下构建所有yml:

development:
    domain: localhost

production:
    domain: mydomain.com

test:
    domain: foo
然后,当您加载yml文件时,您希望获取所处特定环境的设置,如下所示:

MY_CONFIGS = YAML.load_file("[path to my yaml file]/application.yml")[RAILS_ENV]

我喜欢马修的答案,除非你在那些文件(密码)里有一些秘密

如果您在源代码中有不需要的密码,当我的UrbanDeploy客户遇到这种情况时,我会告诉他们使用一个脚本(或者我们有一个内置脚本),该脚本可以根据环境有效地进行令牌替换。替换来自部署系统的位置,或部署目标上某个地方的魔法文件


无论哪种方式,都应将环境视为第一顺序的东西,其中包含需要管理的环境相关数据

使用kwateeSDCM,您可以在部署时逐个服务器自定义任何文件。这样,您只需要一个模板化的application.xml,并根据目标服务器对其进行参数化。

我说的是application.yml,而不是.rb。反映这种方法的答案是忽略版本控制中的实际application.yml,使用application.yml.example并提交对其所做的更改。复制示例并在系统上进行修改。但是,如果添加/删除配置键,仍然需要手动编辑。很抱歉,我忽略了.yml部分。我改变了我的答案,希望它能给你一些更好的想法。。。