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

部署后,无论何时都不起作用。在 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

2

/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'

不要被这条线弄糊涂了。这是为每个 ubuntu 实例安装的 ruby​​ 库,因此您可以执行 ruby​​ 命令。

您需要 cd 来进行项目并安装捆绑程序。

运行这个。

cd /to/your/project
[sudo] gem install bundler
bundle install

更新 rbenv 的信息

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

在 Ubuntu 上使用 ~/.bashrc,在 Zsh 上使用 ~/.zshrc

$ type rbenv
#=> "rbenv is a function"
于 2015-05-19T16:52:27.273 回答
0

我也有这个错误:

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

在调查了这个问题之后,PATH shell 变量在 cronb 作业中是不同的,并且里面没有 rbenv 的东西

使用 crontab -e 手动更改 crontab

并在 crontab 行添加

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

之后cronjob开始工作......

我不认为这是一个好的答案,而是让它工作的黑客。也许它可以帮助某人。

于 2015-06-02T00:02:13.417 回答