加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用capistrano部署时隐藏mysql2密码的好方法

发布时间:2020-12-17 03:04:55 所属栏目:百科 来源:网络整理
导读:所以,这是我的capistrano文件 load 'deploy/assets'require "bundler/capistrano" set :application,"XXXXXX"set :repository,"XXXXXX"set :scm,:git # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version c
所以,这是我的capistrano文件

load 'deploy/assets'
require "bundler/capistrano" 
set :application,"XXXXXX"
set :repository,"XXXXXX"

set :scm,:git # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names
# Or: `accurev`,`bzr`,`cvs`,`darcs`,`git`,`mercurial`,`perforce`,`subversion` or `none`
set :repository,"XXXXXX"

role :web,"XXXXXX"                          # Your HTTP server,Apache/etc
role :app,"XXXXXX"                          # This may be the same as your `Web` server
role :db,"XXXXXX",:primary => true # This is where Rails migrations will run
#role :db,"your slave db-server here"

set :user,'root'
set :use_sudo,false
set :deploy_to,"/var/www/#{application}"
set :deploy_via,:remote_cache
set :normalize_asset_timestamps,false

# if you want to clean up old releases on each deploy uncomment this:
# after "deploy:restart","deploy:cleanup"

# if you're still using the script/reaper helper you will need
# these http://github.com/rails/irs_process_scripts

# If you are using Passenger mod_rails uncomment this:
namespace :deploy do

  task :start do ; end
  task :stop do ; end
  task :restart,:roles => :app,:except => { :no_release => true } do
    run "touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

现在,当我运行cap deploy时,我得到一个错误

Access denied for user 'root'@'localhost' (using password: NO)

我假设那是因为我的database.yml文件是

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
    adapter: mysql2
    encoding: utf8
    database: XXXXX
    username: root
    password: 
    socket: /tmp/mysql.sock

现在,因为我有一个公共github帐户.我不想传递我的密码并将其发布到github.如果我没有传递密码,我无法部署应用程序.

处理这个问题的好方法是什么?

谢谢

解决方法

我会推荐以下内容:

>将config / database.yml移动到repo中的config / database.yml.sample
>删除config / database.yml.sample中的所有敏感信息,例如密码和
将“sample”配置文件提交到您的repo.
>将config / database.yml添加到.gitignore文件中,因此无法将其提交到repo
>在您的服务器上,手动将config / database.yml.sample复制到Capistrano为您创建的共享/目录中的config / database.yml.这应该在运行cap deploy:setup命令后完成,该命令创建顶级共享和释放目录.在设置应用程序时,这应该只需手动完成一次.
>在服务器上的shared / config / database.yml中,填写实际的DB详细信息,包括密码. chmod该文件,以便那些不应该访问的人无法读取.
>将以下内容添加到部署脚本中:

namespace(:customs) do
   task :symlink_db,:roles => :app do
    run <<-CMD
      ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml
    CMD
  end
end
after "deploy:update_code","customs:symlink_db"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读