使用Rails生成Javascript代码

使用Rails生成Javascript代码,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我目前正在开发一个web应用程序,它可以生成可以附加到另一个页面的JS代码。就像从下面的表单生成器生成的电子邮件订阅表单一样: <script type="text/javascript" src="https://app.getresponse.com/view_webform_v2.js?u=BB1K&webforms_id=1523701"></script> 我希望JS代码呈现图像或文本,而不是生成订阅表单,我希望将输入的图像或文本放入文件存储(如A

我目前正在开发一个web应用程序,它可以生成可以附加到另一个页面的JS代码。就像从下面的表单生成器生成的电子邮件订阅表单一样:

<script type="text/javascript" src="https://app.getresponse.com/view_webform_v2.js?u=BB1K&webforms_id=1523701"></script>

我希望JS代码呈现图像或文本,而不是生成订阅表单,我希望将输入的图像或文本放入文件存储(如AWS)中,而不是放在我的应用程序中

我在Rails 4.2.5上运行

上面的JS代码正在生成表单,表单必须保存在文件存储(CMIIW)中的某个位置。我想做一个应用程序,可以生成这种JS代码


另外,我是Rails的新手,任何人都可以解释这个过程,或者是否有任何gem可以帮助完成这个任务。谢谢。

为了生成JS文件并存储在S3中,您应该执行以下操作:

  • 在TMP文件夹中创建一个文件
  • 上传到S3
  • 创建文件:

    最佳做法是创建服务,例如:

    # app/services/js_generator.rb
    class JsGenerator
      def initialize(some, params, here)
       @params = params
       # ...
      end
    
      def generate_code
        js = <<-END.squish
          var yourJavaScriptCode = "here";
          var embededExample = #{params};
          # ... etc
        END
      end
    
      def generate_and_save(tmp_file_name)
        code = generate_code
        tmp_file = "#{Rails.root}/tmp/#{tmp_file_name}.js"
        File.open(tmp_file, 'w') do |f|
          f.write code
        end
        tmp_file
      end
    end
    
    #app/services/js_generator.rb
    类JS生成器
    def初始化(一些,参数,此处)
    @params=params
    # ...
    结束
    def生成代码
    js=所以你想要的是一个


    公开的 其基础是你需要一个公共JS文件来从你的应用程序中“拉”出数据,并在别人的网站上显示相应的HTML

    该文件将包含在其他人的网站上;它将使用来自服务器的数据填充站点上的HTML元素(通过)。它可能会使用一个,但更多的时候只是用您自己服务器上的资产装饰一个HTML元素

    你可以放在网站上的所有小部件/徽章/按钮都只是嵌入了其他人的JS。这些JS文件需要处理应用程序中的公共数据(即您不能使用任何服务器端技术)

    --

    JS

    将JS文件公开的唯一方法是将其放置在
    public
    文件夹中,或者至少是应用程序(子域)中可公开访问的部分

    不能使用该功能

    当然,您可以使用etc等版本控制机制,但事实是,您需要一个公共“链接”,其他站点可以包括:

    <script src="http://api.yoursite.com/public.js"></script>
    
    --

    数据

    要在站点上填充数据,您需要使用可公开访问的
    API

    #config/routes.rb
    scope constraints: { subdomain: "api" } do
       resources :images, module: :api #-> api.url.com/images/x
    end
    
    必须使用与应用程序类似的身份验证进行备份(我的API身份验证集成有点模糊):


    科尔斯 最后,最后一项考虑是:

    跨源资源共享(CORS)是一种机制,允许从源于资源的域之外的另一个域请求网页上的受限资源(例如字体&javascript

    换句话说,你不能让任何人从你的服务器上拉你的JS文件。除非您使用正确的
    CORS
    策略授予他们权限,否则HTTP将不允许这样做

    您需要做的是使您的
    public.js和
    API
    可以被任何人访问。因此,建议将这两者都放在子域中。我可以给你更多的信息,如果需要的话


    有什么宝石可以帮助完成这项任务吗

    据我所知没有

    这是一些高级功能。您必须知道HTTP web服务的底层身份验证模式,并将其与用于第三方的JS实现相匹配


    以最简单的形式,您正在制作一个小应用程序(“widget”),用于提取API数据。你只需要知道你的应用程序的哪些部分允许访问,以使功能正常工作。

    你说的“我希望JS代码呈现图像或文本并保存到AWS”是什么意思?我更新了问题,抱歉我的英语不好。请让我知道,如果它仍然困惑你。你知道关于“贡”宝石。这可能对你有帮助。通过使用它,我们可以像文本视图一样显示生成的js代码。你需要这种东西吗?我说得对吗?兰兹特,这不会有帮助。那么我认为你需要一个JS脚本来帮助别人创建一个“表单”,并将表单保存起来供以后使用,对吗?比如,如果用户想要一个“红色”表单,他们可以将脚本放在他们的站点上&它会显示表单?这太棒了。我试试看。非常感谢你,里奇!
    // site
    <script "http://api.yoursite.com/public.js"></script>
    <body>
       <div id="your_widget" data-name="tester" data-attribute="value"></div>
    </body>
    
    // JS
    
    #config/routes.rb
    scope constraints: { subdomain: "api" } do
       resources :images, module: :api #-> api.url.com/images/x
    end
    
    #app/models/user.rb
    class User < ActiveRecord::Base
       has_secure_token #-> native to Rails 5; gem for Rails 4
    end
    
    #app/controllers/api/images_controller.rb
    class Api::ImagesController
       before_filter :authenticate
    
       def show
           user  = User.find_by token: request.headers["Auth_Key"]
           image = user.images.find params[:id]
           render json: image.to_json if image
       end
    
       private
    
       def authenticate
          if request.headers.include? "Auth_Key"
             render :unprocessable_entity unless User.exists? token: request.headers["Auth_Key"]
          end
       end
    end
    
    var image_url = $.ajax({
       url:     "http://api.url.com/images/x",
       headers: "Auth-Key": "x"
    });