Railsアプリをcapistranoでデプロイしようと悪戦苦闘しております。
$ bundle exec cap production deploy --trace --dry-run を実行したところ以下のようなエラーが出ています。
エラーの内容を見て 'tail' はありません。となっているのはわかったのですが、その場所がわからなくて困っています。
エラー内のconfig/deploy.rb:149:in `<top (required)>'には'tail'は無いし
自分の実力では発見することが出来ないので教えていただけないでしょうか?
Task Argument Error という表示もあります。
そもそも、下記を見てエラーが発生している場所はわかるのでしょうか?
[vagrant@localhost chibi]$ bundle exec cap production deploy --trace --dry-run ** Invoke production (first_time) ** Execute production ** Invoke load:defaults (first_time) ** Execute load:defaults cap aborted! NoMethodError: undefined method `tail' for nil:NilClass Did you mean? taint /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-10.5.0/lib/rake/task_manager.rb:212:in `ensure in in_namespace' /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-10.5.0/lib/rake/task_manager.rb:212:in `in_namespace' /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rake-10.5.0/lib/rake/dsl_definition.rb:147:in `namespace' config/deploy.rb:149:in `<top (required)>' /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/capistrano-3.11.0/lib/capistrano/setup.rb:27:in `load' /home/vagrant/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/capistrano-3.11.0/lib/capistrano/setup.rb:27:in `block (3 levels) in <top (required)>' /home/vagrant/.rbenv/versions/2.3.1/bin/bundle:23:in `load' /home/vagrant/.rbenv/versions/2.3.1/bin/bundle:23:in `<main>' Tasks: TOP => production
デプロイは初めてでわからないことだらけですが、宜しくお願いします。
追記
サイトでいろいろ調べていたところCapistrano v2 DSLをCapistrano v3と一緒に使用しているために発生しているらしいのですが
対処方法がわからないので教えてください。
サイトでは
オプションroles: :appを次のようなブロックに置き換える必要があります。 task :my_task do on roles(:app) do ... end end
とありました。
参考書のバージョンは2.14.2で自分のバージョンは3.11.0ですのでエラーになってしまったようでした。
問題の発生コードは以下になります。(参考書のコードをそのまま記述しています。)
※capistranoでデータベースのバックアップを自動化するコードです。
config/deploy.rb namespace :db do desc "Dump the database and compress it." task :backup, :roles => :db, :only => { :primary => true } do #ここのコードを変更するのだと思います。 backups_path = "#{shared_path}/db_backups" date = capture "cat #{current_path}/config/database.yml" config = YAML::load(data)[rails_env] abort unless config && config['adapter'] == 'mysql2' file_name = "#{config['database']}-#{release_name}.sql.gz" command = "/usr/bin/mysqldump --user=#{config['username']}" command += " --password" if config['password'] command += " --host=#{config['host']}" if config['host'] command += " --port=#{config['port']}" if config['port'] command += " #{config['database']}" command += " | gzip -c > #{backups_path}/#{file_name}" run "mkdir -p #{backups_path}" run command do |channel, _, output| if output =~ /^Enter password:/ channel.send_data "#{config['password']}n" end end end end
どのように記述するべきなのでしょうか?ご教示お願いします。
回答1件
あなたの回答
tips
プレビュー