質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

927閲覧

エラーの場所にたどりつけないので教えていただけませんでしょうか?

koume

総合スコア458

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/03/13 13:27

編集2019/03/13 14:06

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

どのように記述するべきなのでしょうか?ご教示お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2019/03/13 13:40

プログラムのコードが無いのに、判るわけないでしょ? それぐらいは常識ではないでしょうか?
koume

2019/03/13 14:07

大変失礼いたしました。コードを追試させていただきました。宜しくお願いします。
koume

2019/03/13 16:17

task :backup, :roles => :db, :only => { :primary => true } doの部分を task :backup do on roles(:db) do でとりあえずエラーは出なくなりました。
guest

回答1

0

自己解決

一応解決したことにします。

投稿2019/03/13 16:41

koume

総合スコア458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問