2015-08-17 3 views
0

Я пытаюсь получить доступ к моим предварительно скомпилированным файлам моего приложения из другого. У меня есть определенная архитектура. Вот упрощенное деревоЧтобы получить доступ к файлам javascript из другого приложения

├── app 
│   ├── assets 
│   │   ├── javascripts 
│   │   │   ├── application.coffee 
│   │   │   ├── my_js_file.coffee 
├── my-other-app 
│   ├── index.html 
│   ├── javascript 
│   │   ├── anotherJSFile.js 

Я хотел бы загрузить на index.html скомпилированный файл my_js_file.coffee.

my-other-app не является Rails-приложением. Он содержит базовый index.html файл, в котором конкретный URL перенаправления, где я пытаюсь что-то вроде:

<script src="http://myapp.com/assets/my_js_file.js"></script> 

Я определил его на файл конфигурации Apache (эта часть в порядке).

Моя проблема заключается в том, что я не могу найти способ доступа к скомпилированному файлу my_js_file.js. Доступ к файлу и самому имени файла (с отпечатком пальца). Как я могу это решить?

Edit: Я думаю, что основная проблема исходит от отпечатков пальцев, потому что мне нужно знать, что адаптировать свой URL на моем втором приложении динамически.

Edit2: Я нашел способ создания динамического URL с правильным отпечатка пальца, но я до сих пор не может получить доступ к собранным файлам (неавторизованных)

+0

Уверены ли ссылки на другой файл? Попробуйте поместить URL-адрес ('http: // myapp.com/assets/my_js_file.js') в адресную строку вашего браузера. Если это работает, то странно, что первое приложение не может его увидеть. Я бы использовал вкладку сети в инструментах chrome dev для ее отладки. –

+0

нет, это не потому, что на производстве мне нужно знать отпечаток пальца. И я не знаю, как получить этот отпечаток пальца, чтобы изменить мой url в соответствии с ним. – BriceB

+0

Вам нужно больше поговорить об этом отпечатке пальца в своем вопросе, так как это явно является причиной проблемы. –

ответ

0

я это сделал, но это было немного сложно.

Есть 2 балла:

  1. расслоения плотного дактилоскопические
  2. подлинности маркеров из приложения рельсов на другой веб-страницу (за пределами этого рельсы приложения среды)

Чтобы решить первую точку я имел для создания метода на модели, которую я вызываю в конце развертывания (с capistrano), чтобы динамически изменять файл index.html. Вот как я это сделал:

#my-other-app/index.html 

<!doctype html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

     <!-- BEGIN DYNAMIC URI --> 

     <!-- END DYNAMIC URI --> 

    </head> 
    <body > 
     <div id="awesome"> 
      Some stuff here.. 
     </div> 
    </body> 
</html> 

#myModel.rb 
def self.generate_index_file 
    js_files = ['my_js_file.js'] 
    tempfile = File.open Rails.root.join('my-other-app/index.tmp'), 'w' 
    f = File.new('my-other-app/index.html') 
    f.each do |line| 
    if line =~ /^.*<!-- BEGIN DYNAMIC URI -->/ 
     tempfile << line 
     js_files.each do |filename| 
     fingerprinted_name = Rails.application.assets.find_asset(filename).digest_path 
     tempfile << "<script src='#{Rails.application.default_url_options[:host]}/assets/" + fingerprinted_name + "?body=1'></script>\n" 
     end 

    else 
     tempfile << line 
    end 
    end 

    f.close  
    tempfile.close 

    FileUtils.mv("my-other-app/index.tmp", "my-other-app/index.html") 
end 

#config/deploy/production.rb 
# Available only for Capistrano 2.x 

namespace :deploy do 
    task :generate_samsung_index, roles: :app do 
    run %Q{cd #{latest_release} && RAILS_ENV=#{rails_env} bundle exec rails runner 'MyModel.generate_index_file'} 
    end 
end 
after "deploy:restart", "deploy:generate_samsung_index" 

Теперь, чтобы решить вторую часть задачи (аутентификация части), мне нужно, чтобы добавить маркер в URL, прежде чем добавив его к <head>. Вот мой код:

#my_models_controller.rb 
def my_method 
    redirect_to "http://myawesomeurl.com?token=#{form_authenticity_token}" 
end 

#my-other-app/index.html 
# On <head> with my previous code 
<script language="javaScript" type="text/javascript"> 
    meta1 = document.createElement("meta"); 
    meta1.name = "csrf-param"; 
    meta1.content = "authenticity_token"; 
    $("head").append(meta1); 

    token = "token" 
    token_result = new RegExp(token + '=([^&]*)', 'i').exec(window.location.search) 
    meta2 = document.createElement("meta"); 
    meta2.name = "csrf-param"; 
    meta2.content = token_result; 

    $("head").append(meta1); 
    $("head").append(meta2); 
</script> 

Я надеюсь, что это поможет кому-то еще.

Смежные вопросы