2013-11-10 2 views
4

Я не уверен, как разместить мой опубликованный ключ в моем JavaScript-коде. Когда я размещаю значение публикуемого ключа непосредственно в JavaScript, он отлично работает. Когда я пытаюсь использовать переменные среды, это не работает.Stripe w/Ruby on Rails Переменные ENV в Javascript

конфигурации/Инициализаторы/stripe.rb

Rails.configuration.stripe = { 
    :publishable_key => ENV['PUBLISHABLE_KEY'], 
    :secret_key  => ENV['SECRET_KEY'] 
} 

Stripe.api_key = Rails.configuration.stripe[:secret_key] 

JavaScripts/charges.js.erb

Stripe.setPublishableKey(<%= Rails.configuration.stripe[:publishable_key] %>); 

var stripeResponseHandler = function(status, response) { 
    var $form = $('#payment-form'); 

    if (response.error) { 

     $form.find('.payment-errors').text(response.error.message); 
     $form.find('button').prop('disabled', false); 
    } else { 

     var token = response.id; 

     $form.append($('<input type="hidden" name="stripeToken" />').val(token)); 

     $form.get(0).submit(); 
    } 
}; 

jQuery(function($) { 
    $('#payment-form').submit(function(e) { 
     var $form = $(this); 


     $form.find('button').prop('disabled', true); 

     Stripe.createToken($form, stripeResponseHandler); 

     return false; 
    }); 
}); 

ответ

3

Не совсем подходит, но мне нравится, как Railscast (http://railscasts.com/episodes/288-billing-with-stripe) установления мета-тег с переменной среды, а затем с помощью Javascript для вызова значения в метатеге. Бит вы хотите начинается примерно 4m10s

<%= tag :meta, :name => "stripe-key", :content => STRIPE_PUBLIC_KEY %> 

Затем код JS является:

Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')) 

Я не поклонник вставки переменных среды в JS непосредственно.

+0

Большое вам спасибо, ребята! – TonyTau

+0

Почему вам не нравится вставлять переменные среды в JS напрямую? Я все еще новичок, было бы неплохо узнать причину этого. – TonyTau

+0

Одна из причин, почему лучше не хранить ключи и т. Д. В источнике javascript, заключается в том, что вам нужно перекомпилировать актив при изменении переменной ENV. Если вы храните его в теге meta, вам просто нужно перезапустить сервер. – Jeriko

0

То, что у вас похоже, должно работать. Когда вы запускаете свой сервер, вы вводите правильные ключи?

PUBLISHABLE_KEY = pk _ #### _############### SECRET_KEY = sk _ #### _############# ### рельсы S

0

Хотя я не думаю, что хранение деталей нашивки в Javascript мудр, вы можете использовать gem called gon для загрузки переменных в JS:

#app/controllers/your_controller.rb 
gon.push({ 
    :user_id => 1, 
    :user_role => "admin" 
}) 

#app/assets/javascripts/your_javascript.js 
gon.variable_name 

вы должны добавить это в файл макета:

<head> 
    <title>some title</title> 
    <%= include_gon %> 
    <!-- include your action js code --> 
    ... 

Для загрузки ENV переменные даже в развитии, я бы затем использовать gem called Figaro, которая в основном позволяет загружать ENV переменные в любом состоянии:

#app/config/application.yml 
YOUR_ENV_VAR: 'information' 
Смежные вопросы