部署 Deploy Rails app with JRuby and Dokku

pynix · 2018年05月30日 · 最后由 pynix 回复于 2018年09月07日 · 8812 次阅读
本帖已被设为精华帖!

最近想尝试一下 jruby,于是尝试部署了一个 rails 应用,这篇文章会带你一步一步重放部署过程。

准备环境

开始

登陆 digitalocean, 新建 droplet,如图。

  1. 系统选择 ubuntu 16.04 x64,digitalocean 的一键部署里也有 dokku,不过版本更新慢。
  2. 选择配置,普通的小项目 2G1 核就够了。
  3. 勾选 User data,复制 dokku cloud-config 内容,主要是安装 dokku,postgresql,letsencrypt 插件,可以修改 dokku 版本号到最新版。
  4. 勾选公钥,起个名,点击 Create。

等在创建完成后 cloud-init 会根据 cloud-config 内容安装必要组件,现在可以获得 droplet 的 IP。

接下来需要绑定域名。 拷贝 droplet IP,增加 2 条 A 记录,如图。

大概需要几分钟生效。然后浏览器输入域名。

打开 dokku web installer。公钥已自动填入,只需要填入域名,勾选 virtual host,点击完成即可。

安装本地环境

  1. dokku client wget https://raw.githubusercontent.com/dokku/dokku/master/contrib/dokku_client.sh -O /usr/local/bin/dokku && chmod +x /usr/local/bin/dokku

  2. jruby and rails

    rbenv install jruby-9.2.0.0
    rbenv global jruby-9.2.0.0
    gem install bundler
    gem install rails -v 5.1.6
    # 5.2.0暂时有点小问题。
    

创建项目

rails new blog -d postgresql

cd blog 修改config/database.yml

production:
  url: <%= ENV['DATABASE_URL'] %>

做一次 git commit

git add . && git commit -m "initial commit"

准备 Docker

wget https://raw.githubusercontent.com/cpuguy83/docker-jruby/master/9000/jre/Dockerfile

去掉CMD ["irb"],加入

ADD . /app
WORKDIR /app

RUN bundle install
RUN bundle exec rake assets:precompile

CMD bundle exec rails s -b 0.0.0.0 -p $PORT

加入 listen gem

echo "gem 'listen'" >> Gemfile && bundle install

提交

git add . && git commit -m "add Dockerfile"

部署

export DOKKU_HOST=pynix.me
dokku apps:create rails
git push --set-upstream dokku master

很长的 log..............................

=====> Application deployed:

http://rails.pynix.me

url 出来了。。点一下看看。

还是熟悉的配方,还是熟悉的味道,Oh,Yhe。

现在是开发环境,有空补生产环境和 scaffold。

到现在还没有登陆服务器。。。。

huacnlee 将本帖设为了精华贴 05月30日 18:12

JRuby 能在生产环境用的起来么?一些带有 C extension 的 gems 怎么处理?

另外,JRuby 的内存占用如何?

厉害啊

是 JRuby 不是 jurby

imwildcat 回复

能跑起来,但是 C extension 如果没有 java alternative 就不行了,JRuby 好像已经完全去除 c extension 的支持了。

googya 回复

手滑了,但是汉字的序顺完全不影响阅读。 so as Englsih.

9楼 已删除

利用 dokku 或者 flynn 部署 rails +pg 是一件非常愉悦的事情 😄

pynix Capistrano + Rails 5.2 自动化部署 中提及了此贴 06月06日 22:43

经过这几天的观察,Rails 在 JRuby 上还是有很多问题,用在生产环境还是有很大的风险。

太折腾了,已放弃,还是老老实实用 CRuby 吧,性能提升有限,还各种诡异的线程死锁。

pynix 回复

哈哈 还是更喜欢 GIL 的味道哇

IChou 回复

没有 GIL,很多代码都不安全了。。

wppurking 回复

看了下,感觉 flynn 更强大一些

lidashuang 回复

flynn 我玩了下 感觉不错 适合生产 dokku 感觉适合搞开发和测试

项目前期可以用 dokku,flynn 相对难跑起来。。。而且不如直接上 k8s 了。。。。

pynix 请教 Rails + Passenger + Capistrano 部署 中提及了此贴 10月06日 14:26
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册