使用 .env 在 Rails 引擎中配置 Stripe

Congifure Stripe in a Rails Engine with .env

我在 Rails::Engine 中设置条带时遇到问题,这是一个双重问题,因为第二个问题与加载环境有关,这很有趣,但会解决这个问题。

此处的目标是从大型 Rails 应用程序中分离订阅流程。

更新 因此,当我全部输入时,我实际上让它工作了。下面贴出答案。请随时发表评论,并提供更好的方法来做到这一点。

第一个问题STRIPE CONFIG

询问如何在 rails 引擎中设置条带。与父引擎或 Rails 应用分开。我尝试了一些东西。

第二题加载环境

.envs 在 运行 虚拟应用程序的本地服务器尚未在规范中加载时未加载。

条纹配置

#/:engine_name/engine.rb
require "dotenv-rails"

module :engine_name
  class Engine < ::Rails::Engine
    isolate_namespace :engine_name

    config.generators do |g|
      g.test_framework :rspec, fixture: false
      g.fixture_replacement :factory_girl, dir: 'spec/factories'
    end

    #load envs
    Dotenv::Railtie.load

    initializer "config.stripe" do |app|
      config.stripe = {
        :publishable_key => ENV['STRIPE_PUBLISHABLE_KEY'],
        :secret_key      => ENV['STRIPE_SECRET_KEY']
      }

      Stripe.api_key = ENV['STRIPE_SECRET_KEY']
    end
  end
end

正在加载 .env

因此,在初始化程序 "config.stripe" 之上,块传递给父 Rails 应用程序。当 运行 本地虚拟应用程序或测试中的引擎时,这就是虚拟应用程序。这导致 Dummy 应用程序成为根位置。令人困惑的部分是测试 .env 在引擎根路径中时也被加载,但这不会为引擎加载。

所以你的 .env 必须进入虚拟应用根目录。虽然由引擎加载而不是 Rails::app。尽管引擎将获取所有父应用程序 ENV。这有点令人困惑,但最终还是有道理的。