部署 Deploy Rails app with JRuby and Dokku

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

最近想尝试一下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。

共收到 12 条回复

现在是开发环境,有空补生产环境和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,很多代码都不安全了。。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册