我刚刚将我的应用程序部署到生产服务器,但看起来我添加到.procfile(foreman)的每个进程都没有启动。细节: 我使用的是Rails 4.0.12,工头 0.78.0, sidekiq 3.4.2和发条 1.2.0。我正在使用 Capistrano ,我已经定义了一个任务,可以在 Ubuntu 14.02 上将procfile导出为 upstart 服务。但是,当我启动该服务时,不会处理任何后台作业。当我查看该upstart服务的日志文件时,我只看到以下内容:
Your ruby version is 1.9.3, but your Gemfile specified 2.1.2
应用程序正在运行,我可以在sidekiq仪表板上看到没有处理任何内容。基于错误消息,看起来我正在执行我的procfile错误。我尝试了多种执行方案,但似乎没有任何工作。我的.procfile目前看起来像这样:
worker: rbenv sudo bundle exec sidekiq -C config/sidekiq.yml -e production
clock: rbenv sudo bundle exec clockwork config/clock.rb
导出的upstart脚本的一部分如下所示:
start on starting aaa-clock
stop on stopping aaa-clock
respawn
env PORT=5100
setuid da_admin
chdir /var/www/aaa/releases/20150728172635
exec rbenv sudo bundle exec clockwork config/clock.rb
如果我在bash中单独尝试最后两个命令,它可以工作,但是当我启动服务“sudo service aaa start”或“rbenv sudo service aaa start”时,它不起作用。
deploy.rb 的一部分,我将导出我的upstart服务:
namespace :foreman do
desc "Export the Procfile to Ubuntu's upstart scripts"
task :export do
on roles(:app) do
within release_path do
execute :rbenv, "sudo bundle exec foreman export upstart /etc/init -a #{fetch(:application)} -u #{fetch(:user)} -l #{current_path}/log -f #{release_path}/Procfile"
end
end
end
desc "Start the application services"
task :start do
on roles(:app) do
execute :rbenv, "sudo service #{fetch(:application)} start"
end
end
desc "Stop the application services"
task :stop do
on roles(:app) do
execute :rbenv, "sudo service #{fetch(:application)} stop"
end
end
desc "Restart the application services"
task :restart do
on roles(:app) do
execute :rbenv, "sudo service #{fetch(:application)} restart"
end
end
end
有人知道可能出现什么问题吗?我怀疑,这在环境配置中会出现一些错误。提前感谢您的时间。
修改
问题出现在新贵脚本的环境中,类似的问题指出了我正确的方向: foreman issue foreman another issue
我必须使用各种环境变量的配置创建.env文件。现在它至少开始了(其他错误出现了,但它们与此问题无关)。
项目目录根目录中的.env文件示例:
PATH=/home/user/.rbenv/versions/2.1.2/bin:/usr/bin
RAILS_ENV=production
HOME=/home/user