Github Actions 和 RAILS_MASTER_KEY

9

我一直在尝试使用Rails设置GitHub-actions,但是我遇到了RAILS_MASTER_KEY(我猜测)的问题。

这是我在最后一步# 构建和运行测试中收到的错误信息:

rails aborted!
ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessage
/home/runner/work/my-project/my-project/config/environment.rb:5:in `<main>'
/home/runner/work/my-project/my-project/bin/rails:9:in `<top (required)>'
/home/runner/work/my-project/my-project/bin/spring:15:in `require'
/home/runner/work/my-project/my-project/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'

Caused by:
ArgumentError: key must be 16 bytes

.github/workflows/main.yml:

name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on:  ubuntu-latest
    services:
      db:
        image: postgres:11
        env:
          POSTGRES_PASSWORD: xxxxxx
        ports: ['5432:5432']
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
      # Download a copy of the code in the repository before running CI tests
      - name: Checkout repository
        uses: actions/checkout@v2

      # Setup Ruby
      - name: Setup Ruby
        uses: actions/setup-ruby@v1
        with: 
          ruby-version: 2.6.6

      # NPM install
      - name: NPM install with caching
        uses: bahmutov/npm-install@v1.1.0
        # with:
         # cmd: install

      # Build and run tests
      - name: Build and run tests
        env:
          DATABASE_URL: postgres://postgres:@localhost:5432/test
          RAILS_ENV: test
          RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }}
        run: |
          sudo apt-get -yqq install libpq-dev
          gem install bundler
          bundle install --jobs 4 --retry 3
          bundle exec rails db:prepare
          bundle exec rails test


我推断这与我的RAILS_MASTER_KEY变量有关。
我检查了存储在我的项目环境变量中的密钥,发现它恰好为32字节。我不确定如何最好地进行下一步操作,而且我不愿删除密钥,因为我担心会破坏应用程序的其他部分。在我的观点中,设置一个32字节长度合法的密钥选项将更加可取,只是我不知道如何以及在哪里进行设置……
对于如何解决这个问题,您有什么想法吗?

为了调试 GitHub Actions,我发现使用 tmate 来“ssh”到运行器并“四处查看”非常有用。我建议在“构建和运行测试”步骤之前添加 tmate 步骤,然后从运行器内部检查环境变量,尝试使用不同的命令运行测试等。https://github.com/marketplace/actions/debugging-with-tmate - Casey Flynn
谢谢@CaseyFlynn抽出时间回复。我按照您的建议使用了tmate,并发现环境变量从未被设置。我无法弄清楚为什么,但是一旦我从工作流中禁用了“RAILS_MASTER_KEY”行,所有事情突然都顺利起来了。我不知道自己对此有何感受,但现在它可以正常工作,这还算可以吧。 - Dominik Picke
没问题,关于未设置的环境变量,在您在“构建和运行测试”步骤之前添加tmate步骤时,是否记得在main.yml中包含env:? 如果它仍然只设置在以下作业步骤上,则在使用tmate进行检查时不会出现。 - Casey Flynn
我额外将它们添加到了“tmate”步骤中,希望它们能够在那里设置。然而,这似乎并没有起作用。 - Dominik Picke
3个回答

11
@Ruslan Vaeev提供了解决方案的第一部分-将主密钥值添加到GitHub存储库秘密中。接下来,在您的工作流程yml文件中使用该秘密,例如: ${{ secrets.RAILS_MASTER_KEY }}
env:
  RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} 

4

那么在生产环境中,你如何实现它呢? - J. Unkrass
1
编辑器=Vim Rails凭据:编辑 凭据:编辑 --环境生产 - Daniel Tello
抱歉,我的问题没有表达清楚。我是指你是否也将生产密钥上传到仓库中?据我所知,这是不好的做法。 - J. Unkrass
1
是的,这是一种不好的做法。您需要保护好生产密钥的安全。大多数云服务都提供了处理机密信息的方法。如果您要上传您的密钥,请确保它不是公开的并且是安全的。我的意思是除了您或您决定的人之外,没有人会读取它。 - Daniel Tello

3
您需要向您的Github存储库添加秘密。转到“设置”选项卡,单击“New secret”,并在其中放置master.key文件的内容,并使用名称RAILS_MASTER_KEY保存。然后,您可以在CI的yml文件中像这样使用它:secrets.RAILS_MASTER_KEY。请参考以下截图:enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接