Rails&Capistrano 3 - 尝试用户生产数据库的登台服务器

fat*_*rog 5 capistrano ruby-on-rails staging

我使用NGINX和Passenger为我的登台环境设置了一台服务器.我还设置了一个staging.rb文件,该文件与环境下的production.rb文件重复.在我的database.yml文件中,我已经进入了一个临时配置:

  staging:
  adapter: mysql2
  database: myapp_staging
  username: root
  password: xxxxxxxxxxxxx
  port: 3306
  pool: 15
  timeout: 5000
Run Code Online (Sandbox Code Playgroud)

环境/ staging.rb:

role :app, %w{deploy@111.111.111.111}
role :web, %w{deploy@111.111.111.111}
role :db,  %w{deploy@111.111.111.111}


# Extended Server Syntax
# ======================
# This can be used to drop a more detailed server definition into the
# server list. The second argument is a, or duck-types, Hash and is
# used to set extended properties on the server.

server '111.111.111.111', user: 'deploy', roles: %w{web app db}, port: 0001
Run Code Online (Sandbox Code Playgroud)

我部署,cap staging deploy然而应用程序将无法启动,并在日志中说:Unknown database 'myapp_production'

如何强制它使用登台数据库?

编辑

Deploy.rb:

set :application, 'dispatch'
set :repo_url, 'myapp'

set :deploy_to, '/home/deploy/myapp'

set :scm, :git
set :branch, 'master'
set :keep_releases, 5
set :format, :pretty
set :log_level, :debug
set :pty, true
set :passenger_restart_with_sudo, true

set :stages, ["staging", "production"]
set :default_stage, "staging"

set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}
set :rvm_map_bins, fetch(:rvm_map_bins, []).push('rvmsudo')

namespace :deploy do

  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end

  after :publishing, 'deploy:restart'
  after :finishing, 'deploy:cleanup'
end
Run Code Online (Sandbox Code Playgroud)

agm*_*eod 5

通过我的cap 3设置,我有一个config/deploy/production.rb环境设置的文件.您是否在分期和制作方面做同样的事情?

set :stage, :staging
server 'example.com', user: 'aaron', roles: %w{web app db}
set :rails_env, :staging
Run Code Online (Sandbox Code Playgroud)

需要确保它设置了适当的环境,因此db任务将知道要连接的数据库.