![AWS EC2 DNS 未响应使用 capistrano 在 CentOS 6 上部署 Rails 应用程序](https://linux22.com/image/686397/AWS%20EC2%20DNS%20%E6%9C%AA%E5%93%8D%E5%BA%94%E4%BD%BF%E7%94%A8%20capistrano%20%E5%9C%A8%20CentOS%206%20%E4%B8%8A%E9%83%A8%E7%BD%B2%20Rails%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我正在尝试使用 capistrano 将一个带有 sqlite3 的小型 rails 应用程序部署到微型 AWS EC2 CentOS 6 实例(在使用 nginx 和 Passenger 后没有取得太大成功)。我按照此网站部署我的应用程序
https://mattbrictson.com/build-and-deploy-a-rails-vps-part-2
部署成功,但 AWS 实例 DNS 响应 和page isn’t working
。ERR_EMPTY_RESPONSE
奇怪的是,当我导航到我的 DNS 时,控制台显示Navigated to data:text/html,chromewebdata
不对。我尝试用 Google 搜索该问题,但没有多少人遇到类似的问题。当我bundle exec cap production deploy
从我的 Mac(不在 AWS 服务器内)运行部署程序时,很难跟踪这一点,因为部署程序成功了,并且没有错误。有没有人遇到过类似的问题,并且知道这个静默部署问题的解决方法?
deployer
我以用户身份在路径上部署了该应用程序/var/www/texter/
,并且该用户可以访问 AWS ec2 实例内的这个文件夹。
我的 AWS 安全组设置中端口 80 和 8080 是打开的,所以我也不认为这是个问题。我使用下面的命令 (如果我错了请纠正我) 告诉我的防火墙接受端口 8080 和 80,但这没有任何作用。
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
以下是我以用户身份设置服务器的操作deployer
,这是 Rails 应用程序的标准:
sudo yum install -y git-core zlib zlib-devel gcc-c++ patch readline readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison curl sqlite-devel
# preparring rbenv, ruby, rails, nodejs
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
exec $SHELL
rbenv install -v 2.1.0
rbenv global 2.1.0
echo "gem: --no-document" > ~/.gemrc
gem install bundler
gem install rails -v 4.2.6 -V
rbenv rehash
sudo yum -y install epel-release
sudo yum install nodejs
之后,我使用、、中的这些内容通过 capistrano 设置了我的 rails (config/deploy.rb
它们都与我上面发布的教程链接相同,但仅供参考)。Capfile
/config/deploy/production.rb
里面config/deploy.rb
set :application, "texter"
set :repo_url, "my_github_repo"
set :linked_dirs, %w(
bin log vendor/bundle public/system
tmp/pids tmp/cache tmp/sockets
)
set :puma_bind, "tcp://0.0.0.0:8080"
Capfile
# Load DSL and set up stages
require "capistrano/setup"
# Include default deployment tasks
require "capistrano/deploy"
# Include tasks from other gems included in your Gemfile
#
# For documentation on these, see for example:
#
# https://github.com/capistrano/rvm
# https://github.com/capistrano/rbenv
# https://github.com/capistrano/chruby
# https://github.com/capistrano/bundler
# https://github.com/capistrano/rails
# https://github.com/capistrano/passenger
#
# require 'capistrano/rvm'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require "capistrano/puma"
# require 'capistrano/passenger'
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
我的内容在/config/deploy/production.rb
:
server "PUBLIC-IP-FROM-AWS",
:user => "deployer",
:roles => %w(web app db)
答案1
我在此页面的帮助下解决了问题
选项 #2 解决了我的问题,希望它也能帮助其他人。但是出现了另一个问题。我让服务器在公共 IP 中运行,但puma
并未运行;部署消息声称一切正常。我通过绕过这个问题并以 root 身份在路径bundle exec passenger start
内运行解决了这个/var/www/myappName/current
问题,然后启动了 nginx 引擎来代理本地主机服务器。解决 puma 服务器是一个完全不同的问题,我可能会在另一篇文章中提出这个问题。