4

だから、ここに私のカピストラーノファイルがあります

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 に公開したくありません。パスワードを渡さないと、アプリをデプロイできません。

この問題を処理する良い方法は何ですか?

ありがとう

4

2 に答える 2

5

また、人々が Capistrano ボットとしてログインするのを防ぐために、SSH システムが十分に保護されていることを確認する必要があります。パスワードで保護された鍵ペアへのアクセスを制限することをお勧めします。

サーバー上の .yml ファイルを暗号化しても意味がありません。これは、保管されるキーをボットに与える必要があるためです。. . 同じサーバー上。マシンで暗号化することは、おそらく良い考えです。Capistrano は、送信前に暗号化を解除できます。

また

私がこれに取り組んだ方法は、データベースのパスワードを、アプリケーションを実行するユーザーに対してのみ読み取り権限を持つファイルに入れることです。次に、database.yml で ERB を使用してファイルを読み取ります。

production:
  adapter: mysql
  database: my_db
  username: db_user
  password: <%= begin IO.read("/home/my_deploy_user/.db") rescue "" end %>
于 2013-03-13T06:31:32.953 に答える
1

次のことをお勧めします。

  1. レポに移動config/database.ymlしますconfig/database.yml.sample
  2. config/database.yml.sampleパスワードなどの機密情報を削除し
    、「サンプル」構成ファイルをリポジトリにコミットします。
  3. ファイルに追加config/database.ymlして.gitignore、リポジトリにコミットできないようにします
  4. サーバー上で、Capistrano が作成するディレクトリに手動でコピー config/database.yml.sampleします。これは、最上位ディレクトリとディレクトリを作成するコマンドを実行したに行う必要があります。これは、アプリケーションをセットアップするときに、手動で 1 回だけ実行する必要があります。config/database.ymlshared/cap deploy:setupsharedreleases
  5. shared/config/database.ymlサーバーで、パスワードを含む実際の DB の詳細入力します。chmodアクセス権を持たない人が読み取れないようにします。
  6. デプロイ スクリプトに次を追加します。

    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"
    
于 2013-03-13T06:36:33.117 に答える