1

Ubuntu 14.04 サーバーで gem をセットアップしようとしています。私のローカルマシンでは正常に動作します。capistrano を使用してサイトをデプロイします。サーバーでrbenvを使用しています。しかしパッセンジャーをインストールするとRuby 1.9がインストールされますが、私は使用していません。rbenv のみを使用します。ここに私の shcedule.rb があります:

set :output, "#{path}/log/cron.log"

every 30.minutes do
    runner 'UploadmailWorker.perform_async'
end

every 12.hours do
    runner 'SubscriptionWorker.perform_async'
end

every :month do
    runner 'PaysellerWorker.perform_async'
end

私の deploy.rb :

set :default_environment, {
  'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}

set :whenever_roles,        ->{ :app }
set :whenever_command,      ->{ [:bundle, :exec, :whenever] }
set :whenever_command_environment_variables, ->{ {} }
set :whenever_identifier,   ->{ fetch :application }
set :whenever_environment,  ->{ fetch :rails_env, fetch(:stage, "production") }
set :whenever_variables,    ->{ "environment=#{fetch :whenever_environment}" }
set :whenever_update_flags, ->{ "--update-crontab #{fetch :whenever_identifier} --set #{fetch :whenever_variables}" }
set :whenever_clear_flags,  ->{ "--clear-crontab #{fetch :whenever_identifier}" }

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

デプロイ後、whenever が機能しません。cron.log で、次のエラーが見つかりました。

/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- bundler/setup (LoadError)
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /home/deploy/istockseller/releases/20150519112817/config/boot.rb:3:in `<top (required)>'
        from bin/rails:7:in `require_relative'
        from bin/rails:7:in `<main>'

どうすれば修正できますか?

4

2 に答える 2

0

私もこのエラーがありました:

custom_require.rb:36:in `require': cannot load such file -- bundler/setup (LoadError)

問題を調査した後、PATH シェル変数が cronb ジョブで異なり、rbenv が含まれていませんでした。

crontab -e を使用して crontab を手動で変更しました

crontab行に追加

... && PATH = my_complete_path RAILS_ENV=production  bin/rails ... ... 

その後、cronjobが機能し始めました...

これは良い答えだとは思いませんが、それを機能させるためのハックです。多分それは誰かを助けるでしょう。

于 2015-06-02T00:02:13.417 に答える