1

使用 Rails 3.2 和 Capistrano 2。我有一个app_config.yml以这种方式加载到应用程序的方法:

# config/app_config.yml
global: &GLOBAL
  sitename: Shop

# config/application.rb
require File.expand_path('../boot', __FILE__)
APP_CONFIG = YAML.load_file(File.expand_path('../app_config.yml', __FILE__))[Rails.env]

# call using this method
<%= APP_CONFIG["sitename"] %>

我想app_config.yml在 Capistrano 的部署脚本中加载相同的内容,这样我就不必再次重新设置变量:

# config/deploy.rb
require "bundler/capistrano"

require File.expand_path('../boot', __FILE__)
APP_CONFIG = YAML.load_file(File.expand_path('../app_config.yml', __FILE__))[Rails.env]

set :stages, %w(production staging)

我也希望使用这种方式访问​​变量:APP_CONFIG["sitename"],但是当我运行部署脚本时,我得到了这个错误:

./config/deploy.rb:4:in `load': uninitialized constant Capistrano::Configuration::Rails
(NameError) # points to the APP_CONFIG = YAML.load_file... line

如何app_config.yml正确加载文件?

4

1 回答 1

1

capistrano 不需要任何 Rails 代码。

这就是为什么调用APP_CONFIG = YAML.load_file(File.expand_path('../app_config.yml', __FILE__))[Rails.env]会引发异常。

你需要Rails.env用你的 capistrano 部署中使用的其他东西替换它。这可能是舞台,也可能只是"production"取决于您的设置。

于 2013-10-22T15:08:10.240 回答