# 基本步骤

  1. 在 Railway 上新建一个项目,选择 Deploy from github repo ,然后选择自己需要部署的项目仓库(如果是第一次使用需要进行授权)
    "Deploy from github repo"

  2. 接下来的选项卡,选择 Deploy nowAdd variables 都可以,之后 Railway 会创建项目并自动进行构建部署,记得在 Deployments 面板中先中止本次的部署操作
    "Deploy project"

  3. 在当前项目中点击 New 按钮,创建一个 Postgresql 数据库

  4. 配置环境变量(可以根据需要修改)

环境变量名备注
PORT3000可以根据需要修改
RAILS_MAX_THREADS5可以根据需要修改
RACK_ENVproduction不要修改
RAILS_ENVproduction不要修改
RAILS_MASTER_KEY[your master key]项目中 master.key 文件中的值
SECRET_KEY_BASE[your secret_key_base]可以使用 RAILS_ENV=production rake secret 生成
DATABASE_URL${{Postgres.DATABASE_URL}}直接引入之前创建好的数据库的连接信息
PGHOST${{Postgres.PGHOST}}直接引入之前创建好的数据库的连接信息
PGPORT${{Postgres.PGPORT}}直接引入之前创建好的数据库的连接信息
PGUSER${{Postgres.PGUSER}}直接引入之前创建好的数据库的连接信息
PGPASSWORD${{Postgres.PGPASSWORD}}直接引入之前创建好的数据库的连接信息
PGDATABASE${{Postgres.PGDATABASE}}直接引入之前创建好的数据库的连接信息
  1. 接下来在 Rails 项目的 Settings 面板中配置域名和启动命令 rails server
    "Setup Start command"

  2. 手动重新部署项目

  3. 点击 Set up your project locally 选项卡,安装 Railway CLI ,连接到当前项目,在本地终端执行命令 railway run rails db:migrate 完成数据库迁移操作
    "migrate database"

# 踩坑

  1. Missing secret_key_base 错误,这是生产环境部署时没有在环境变量中配置 secret_key_base 值导致的
    "Missing secret_key_base"
    除了配置环境变量以外,还要在 config/environments/production.rb 文件进行配置
config/environments/production.rb
require "active_support/core_ext/integer/time"
Rails.application.configure do
  ... 
  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  config.force_ssl = true
  ...
  # Production SECRET_KEY_BASE
  config.secret_key_base = '<%= ENV["SECRET_KEY_BASE"] %>'
end
  1. Database empty url 错误,应该是环境变量值没有读到导致的
    "Database empty url"
  • 出现错误的配置如下:
config/database.yml
...
production:
  adapter: postgresql
  url: '<%= ENV["DATABASE_URL"] %>'
  user: '<%= ENV["PGUSER"] %>'
  password: '<%= ENV["PGPASSWORD"] %>'
  pool: 5
  timeout: 5000
  encoding: unicode
  • 解决方案是将 url 配置项中的单引号对删掉,然后重新部署:
config/database.yml
...
production:
  adapter: postgresql
  url: <%= ENV["DATABASE_URL"] %>
  user: <%= ENV["PGUSER"] %>
  password: <%= ENV["PGPASSWORD"] %>
  pool: 5
  timeout: 5000
  encoding: unicode

当然也可以直接复制 数据库连接urlconfig/database.yml 配置文件中,不过不推荐使用,因为这样既不安全也不灵活

更新于 阅读次数