【问题标题】:Congifure Stripe in a Rails Engine with .env使用 .env 在 Rails 引擎中配置 Stripe
【发布时间】:2016-04-28 20:10:35
【问题描述】:
我在 Rails::Engine 中设置条带时遇到问题,这有点像第二个问题,因为第二个问题与加载环境有关,这很有趣,但会解决的。
这里的目标是从大型 Rails 应用程序中拆分订阅流程。
更新
所以当我把这一切都写出来的时候,我真的让它工作了。下面贴出答案。随时发表评论并提供更好的方法来做到这一点。
第一个问题 STRIPE CONFIG
关于如何在 Rails 引擎中设置条带的问题。与父引擎或 Rails 应用程序分开。我已经尝试了几件事。
第二个问题加载环境
.envs 在为虚拟应用运行本地服务器时没有被加载,但在规范中被加载。
【问题讨论】:
标签:
ruby-on-rails
environment-variables
stripe-payments
rails-engines
【解决方案1】:
条带配置
#/: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。这有点令人困惑,但最终还是有意义的。